{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 项目：用逻辑回归预测泰坦尼克号幸存情况"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析目标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "此数据分析报告的目的是，基于泰坦尼克号乘客的性别和船舱等级等属性，对幸存情况进行逻辑回归分析，从而能利用得到的模型，对未知幸存情况的乘客，根据属性预测是否从沉船事件中幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 简介"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> 泰坦尼克号（英语：RMS Titanic）是一艘奥林匹克级邮轮，于1912年4月首航时撞上冰山后沉没。泰坦尼克号是同级的3艘超级邮轮中的第2艘，与姐妹船奥林匹克号和不列颠号为白星航运公司的乘客们提供大西洋旅行。\n",
    "\n",
    "> 泰坦尼克号由位于北爱尔兰贝尔法斯特的哈兰·沃尔夫船厂兴建，是当时最大的客运轮船，由于其规模相当一艘现代航空母舰，因而号称“上帝也沉没不了的巨型邮轮”。在泰坦尼克号的首航中，从英国南安普敦出发，途经法国瑟堡-奥克特维尔以及爱尔兰昆士敦，计划横渡大西洋前往美国纽约市。但因为人为错误，于1912年4月14日船上时间夜里11点40分撞上冰山；2小时40分钟后，即4月15日凌晨02点20分，船裂成两半后沉入大西洋，死亡人数超越1500人，堪称20世纪最大的海难事件，同时也是最广为人知的海难之一。\n",
    "\n",
    "数据集包括两个数据表：`titianic_train.csv`和`titanic_test.csv`。\n",
    "\n",
    "`titianic_train.csv`记录了超过八百位泰坦尼克号乘客在沉船事件后的幸存情况，以及乘客的相关信息，包括所在船舱等级、性别、年龄、同乘伴侣/同胞数量、同乘父母/孩子数量，等等。\n",
    "\n",
    "`titanic_test.csv`只包含乘客（这些乘客不在`titianic_train.csv`里）相关信息，此文件可以被用于预测乘客是否幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`titianic_train.csv`每列的含义如下：\n",
    "- PassengerId：乘客ID\n",
    "- survival：是否幸存\n",
    "   - 0\t否\n",
    "   - 1\t是\n",
    "- pclass：船舱等级\n",
    "   - 1\t一等舱\n",
    "   - 2\t二等舱\n",
    "   - 3  三等舱\n",
    "- sex：性别\n",
    "- Age：年龄\n",
    "- sibsp：同乘伴侣/同胞数量\n",
    "- parch：同乘父母/孩子数量\n",
    "- ticket：船票号\n",
    "- fare：票价金额\n",
    "- cabin：船舱号\n",
    "- embarked：登船港口\n",
    "   - C  瑟堡\n",
    "   - Q  皇后镇\n",
    "   - S  南安普敦\n",
    "   \n",
    "   \n",
    "`titianic_test.csv`每列的含义和上面相同，但不具备survival变量的数据，即是否幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "original_titanic_train = pd.read_csv(\"titanic_train.csv\")\n",
    "original_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 评估和清理数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在这一部分中，我们将对在上一部分建立的`original_titanic_train`DataFrame所包含的数据进行评估和清理。\n",
    "\n",
    "主要从两个方面进行：结构和内容，即整齐度和干净度。\n",
    "\n",
    "数据的结构性问题指不符合“每个变量为一列，每个观察值为一行，每种类型的观察单位为一个表格”这三个标准；数据的内容性问题包括存在丢失数据、重复数据、无效数据等。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了区分开经过清理的数据和原始的数据，我们创建新的变量`cleaned_titanic_train`，让它为`original_titanic_train`复制出的副本。我们之后的清理步骤都将被运用在`cleaned_titanic_train`上。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "cleaned_titanic_train = original_titanic_train.copy()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据整齐度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>McCarthy, Mr. Timothy J</td>\n",
       "      <td>male</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>17463</td>\n",
       "      <td>51.8625</td>\n",
       "      <td>E46</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
       "      <td>female</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>347742</td>\n",
       "      <td>11.1333</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n",
       "      <td>female</td>\n",
       "      <td>14.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>237736</td>\n",
       "      <td>30.0708</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "5            6         0       3   \n",
       "6            7         0       1   \n",
       "7            8         0       3   \n",
       "8            9         1       3   \n",
       "9           10         1       2   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "5                                   Moran, Mr. James    male   NaN      0   \n",
       "6                            McCarthy, Mr. Timothy J    male  54.0      0   \n",
       "7                     Palsson, Master. Gosta Leonard    male   2.0      3   \n",
       "8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0      0   \n",
       "9                Nasser, Mrs. Nicholas (Adele Achem)  female  14.0      1   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  \n",
       "5      0            330877   8.4583   NaN        Q  \n",
       "6      0             17463  51.8625   E46        S  \n",
       "7      1            349909  21.0750   NaN        S  \n",
       "8      2            347742  11.1333   NaN        S  \n",
       "9      0            237736  30.0708   NaN        C  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从头部的10行数据来看，数据符合“每个变量为一列，每个观察值为一行，每种类型的观察单位为一个表格”，因此不存在结构性问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据干净度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  891 non-null    int64  \n",
      " 1   Survived     891 non-null    int64  \n",
      " 2   Pclass       891 non-null    int64  \n",
      " 3   Name         891 non-null    object \n",
      " 4   Sex          891 non-null    object \n",
      " 5   Age          714 non-null    float64\n",
      " 6   SibSp        891 non-null    int64  \n",
      " 7   Parch        891 non-null    int64  \n",
      " 8   Ticket       891 non-null    object \n",
      " 9   Fare         891 non-null    float64\n",
      " 10  Cabin        204 non-null    object \n",
      " 11  Embarked     889 non-null    object \n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.7+ KB\n"
     ]
    }
   ],
   "source": [
    "cleaned_titanic_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从输出结果来看，`cleaned_titanic_train`共有891条观察值，其中`Age`、`Cabin`和`Embarked`存在缺失值，将在后续进行评估和清理。\n",
    "\n",
    "数据类型方面，`PassengerId`表示乘客ID，数据类型不应为数字，应为字符串，所以需要进行数据格式转换。\n",
    "\n",
    "并且，我们已知`Survived`（是否幸存）、`Pclass`（船舱等级）、`Sex`（性别）、`Embarked`（登船港口）都是分类数据，可以把数据类型都转换为Category。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cleaned_titanic_train['PassengerId'] = cleaned_titanic_train['PassengerId'].astype('str')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "cleaned_titanic_train['Survived'] = cleaned_titanic_train['Survived'].astype('category')\n",
    "cleaned_titanic_train['Pclass'] = cleaned_titanic_train['Pclass'].astype('category')\n",
    "cleaned_titanic_train['Sex'] = cleaned_titanic_train['Sex'].astype('category')\n",
    "cleaned_titanic_train['Embarked'] = cleaned_titanic_train['Embarked'].astype('category')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype   \n",
      "---  ------       --------------  -----   \n",
      " 0   PassengerId  891 non-null    object  \n",
      " 1   Survived     891 non-null    category\n",
      " 2   Pclass       891 non-null    category\n",
      " 3   Name         891 non-null    object  \n",
      " 4   Sex          891 non-null    category\n",
      " 5   Age          714 non-null    float64 \n",
      " 6   SibSp        891 non-null    int64   \n",
      " 7   Parch        891 non-null    int64   \n",
      " 8   Ticket       891 non-null    object  \n",
      " 9   Fare         891 non-null    float64 \n",
      " 10  Cabin        204 non-null    object  \n",
      " 11  Embarked     889 non-null    category\n",
      "dtypes: category(4), float64(2), int64(2), object(4)\n",
      "memory usage: 59.8+ KB\n"
     ]
    }
   ],
   "source": [
    "cleaned_titanic_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理缺失数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从`info`方法的输出结果来看，在`cleaned_titanic_train`中，`Age`、`Cabin`和`Embarked`变量存在缺失值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Williams, Mr. Charles Eugene</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>244373</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Masselmani, Mrs. Fatima</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2649</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>27</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Emir, Mr. Farred Chehab</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2631</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>O'Dwyer, Miss. Ellen \"Nellie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330959</td>\n",
       "      <td>7.8792</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>859</th>\n",
       "      <td>860</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Razi, Mr. Raihed</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2629</td>\n",
       "      <td>7.2292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>863</th>\n",
       "      <td>864</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Miss. Dorothy Edith \"Dolly\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.5500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>868</th>\n",
       "      <td>869</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>van Melkebeke, Mr. Philemon</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>345777</td>\n",
       "      <td>9.5000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>878</th>\n",
       "      <td>879</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Laleff, Mr. Kristo</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>349217</td>\n",
       "      <td>7.8958</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>177 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                      Name  \\\n",
       "5             6        0      3                          Moran, Mr. James   \n",
       "17           18        1      2              Williams, Mr. Charles Eugene   \n",
       "19           20        1      3                   Masselmani, Mrs. Fatima   \n",
       "26           27        0      3                   Emir, Mr. Farred Chehab   \n",
       "28           29        1      3             O'Dwyer, Miss. Ellen \"Nellie\"   \n",
       "..          ...      ...    ...                                       ...   \n",
       "859         860        0      3                          Razi, Mr. Raihed   \n",
       "863         864        0      3         Sage, Miss. Dorothy Edith \"Dolly\"   \n",
       "868         869        0      3               van Melkebeke, Mr. Philemon   \n",
       "878         879        0      3                        Laleff, Mr. Kristo   \n",
       "888         889        0      3  Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "\n",
       "        Sex  Age  SibSp  Parch      Ticket     Fare Cabin Embarked  \n",
       "5      male  NaN      0      0      330877   8.4583   NaN        Q  \n",
       "17     male  NaN      0      0      244373  13.0000   NaN        S  \n",
       "19   female  NaN      0      0        2649   7.2250   NaN        C  \n",
       "26     male  NaN      0      0        2631   7.2250   NaN        C  \n",
       "28   female  NaN      0      0      330959   7.8792   NaN        Q  \n",
       "..      ...  ...    ...    ...         ...      ...   ...      ...  \n",
       "859    male  NaN      0      0        2629   7.2292   NaN        C  \n",
       "863  female  NaN      8      2    CA. 2343  69.5500   NaN        S  \n",
       "868    male  NaN      0      0      345777   9.5000   NaN        S  \n",
       "878    male  NaN      0      0      349217   7.8958   NaN        S  \n",
       "888  female  NaN      1      2  W./C. 6607  23.4500   NaN        S  \n",
       "\n",
       "[177 rows x 12 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train['Age'].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有177条观察值的年龄变量缺失，占总体数据比例20%左右。由于这些观察值数量较多，且的其它变量仍然能为分析提供价值，我们最好保留这些行。\n",
    "\n",
    "但由于我们后面需要用到的逻辑回归函数`Logit`不允许数据中包含缺失值，所以用乘客年龄平均值对缺失值进行填充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "average_age = cleaned_titanic_train['Age'].mean()\n",
    "cleaned_titanic_train['Age'] = cleaned_titanic_train['Age'].fillna(average_age)\n",
    "cleaned_titanic_train['Age'].isna().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>884</th>\n",
       "      <td>885</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sutehall, Mr. Henry Jr</td>\n",
       "      <td>male</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>SOTON/OQ 392076</td>\n",
       "      <td>7.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>885</th>\n",
       "      <td>886</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Rice, Mrs. William (Margaret Norton)</td>\n",
       "      <td>female</td>\n",
       "      <td>39.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>382652</td>\n",
       "      <td>29.1250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>687 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                      Name  \\\n",
       "0             1        0      3                   Braund, Mr. Owen Harris   \n",
       "2             3        1      3                    Heikkinen, Miss. Laina   \n",
       "4             5        0      3                  Allen, Mr. William Henry   \n",
       "5             6        0      3                          Moran, Mr. James   \n",
       "7             8        0      3            Palsson, Master. Gosta Leonard   \n",
       "..          ...      ...    ...                                       ...   \n",
       "884         885        0      3                    Sutehall, Mr. Henry Jr   \n",
       "885         886        0      3      Rice, Mrs. William (Margaret Norton)   \n",
       "886         887        0      2                     Montvila, Rev. Juozas   \n",
       "888         889        0      3  Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "890         891        0      3                       Dooley, Mr. Patrick   \n",
       "\n",
       "        Sex        Age  SibSp  Parch            Ticket     Fare Cabin Embarked  \n",
       "0      male  22.000000      1      0         A/5 21171   7.2500   NaN        S  \n",
       "2    female  26.000000      0      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "4      male  35.000000      0      0            373450   8.0500   NaN        S  \n",
       "5      male  29.699118      0      0            330877   8.4583   NaN        Q  \n",
       "7      male   2.000000      3      1            349909  21.0750   NaN        S  \n",
       "..      ...        ...    ...    ...               ...      ...   ...      ...  \n",
       "884    male  25.000000      0      0   SOTON/OQ 392076   7.0500   NaN        S  \n",
       "885  female  39.000000      0      5            382652  29.1250   NaN        Q  \n",
       "886    male  27.000000      0      0            211536  13.0000   NaN        S  \n",
       "888  female  29.699118      1      2        W./C. 6607  23.4500   NaN        S  \n",
       "890    male  32.000000      0      0            370376   7.7500   NaN        Q  \n",
       "\n",
       "[687 rows x 12 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train['Cabin'].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有687条观察值的船舱号变量缺失，说明船舱号数据在大部分观察值中都是未知的，所以不能删除这些观察值。\n",
    "\n",
    "此外，我们认为船舱号并不是影响生还概率的关键因素，不会被纳入逻辑回归的自变量内，即使缺失也不会影响建立模型，因此可以保留这些观察值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>62</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Icard, Miss. Amelie</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>829</th>\n",
       "      <td>830</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Stone, Mrs. George Nelson (Martha Evelyn)</td>\n",
       "      <td>female</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                       Name  \\\n",
       "61           62        1      1                        Icard, Miss. Amelie   \n",
       "829         830        1      1  Stone, Mrs. George Nelson (Martha Evelyn)   \n",
       "\n",
       "        Sex   Age  SibSp  Parch  Ticket  Fare Cabin Embarked  \n",
       "61   female  38.0      0      0  113572  80.0   B28      NaN  \n",
       "829  female  62.0      0      0  113572  80.0   B28      NaN  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train['Embarked'].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "仅有两条观察值的登船港口变量缺失，但我们认为登船港口并不是影响生还概率的关键因素，不会被纳入逻辑回归的自变量内，即使缺失也不会影响建立模型，因此可以保留这些观察值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理重复数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据数据变量的含义以及内容来看，`PassengerId`是乘客的唯一标识符，不应该存在重复，因此查看是否存在重复值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"PassengerId\"].duplicated().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理不一致数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不一致数据可能存在于所有分类变量中，我们要查看是否存在不同值实际指代同一目标的情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Survived\n",
       "0    549\n",
       "1    342\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Survived\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass\n",
       "3    491\n",
       "1    216\n",
       "2    184\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Pclass\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sex\n",
       "male      577\n",
       "female    314\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Sex\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Embarked\n",
       "S    644\n",
       "C    168\n",
       "Q     77\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Embarked\"].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理无效或错误数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>13.002015</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>22.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>35.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Age       SibSp       Parch        Fare\n",
       "count  891.000000  891.000000  891.000000  891.000000\n",
       "mean    29.699118    0.523008    0.381594   32.204208\n",
       "std     13.002015    1.102743    0.806057   49.693429\n",
       "min      0.420000    0.000000    0.000000    0.000000\n",
       "25%     22.000000    0.000000    0.000000    7.910400\n",
       "50%     29.699118    0.000000    0.000000   14.454200\n",
       "75%     35.000000    1.000000    0.000000   31.000000\n",
       "max     80.000000    8.000000    6.000000  512.329200"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "乘客年龄平均为30岁左右，最大值为80岁，最小值为0.42岁。同乘伴侣/同胞数量最大值为8个，最小为0个。同乘父母/孩子数量最大值为6个，最小值为0个。船票价格平均为32元，最大值为512元，最小值为0元，猜测0元表示增票。数据不存在脱离现实的数值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 整理数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对数据的整理，与分析方向紧密相关。此次数据分析目标是，根据泰坦尼克号乘客的相关信息，预测沉船事件发生后的生还概率。\n",
    "\n",
    "数据变量包含乘客同乘伴侣/同胞数量，以及同乘父母/孩子数量，这些可以帮助计算出船上家庭成员的数量。我们对同乘家庭成员数量是否会显著影响幸存感兴趣，因此可以创建一个新的变量，记录这一数值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  PassengerId Survived Pclass  \\\n",
       "0           1        0      3   \n",
       "1           2        1      1   \n",
       "2           3        1      3   \n",
       "3           4        1      1   \n",
       "4           5        0      3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  FamilyNum  \n",
       "0      0         A/5 21171   7.2500   NaN        S          1  \n",
       "1      0          PC 17599  71.2833   C85        C          1  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S          0  \n",
       "3      0            113803  53.1000  C123        S          1  \n",
       "4      0            373450   8.0500   NaN        S          0  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train['FamilyNum'] = cleaned_titanic_train['SibSp'] + cleaned_titanic_train['Parch']\n",
    "cleaned_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 探索数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置图表色盘为\"pastel\"\n",
    "sns.set_palette(\"pastel\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置图表尺寸\n",
    "plt.rcParams[\"figure.figsize\"] = [7.00, 3.50]\n",
    "plt.rcParams[\"figure.autolayout\"] = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 幸存比例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "survived_count = cleaned_titanic_train['Survived'].value_counts()\n",
    "survived_label = survived_count.index\n",
    "plt.pie(survived_count, labels=survived_label, autopct='%.1f%%')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 乘客年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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jGuvvbbK18ydO9eQxMbGxua0raCgoDE+ApuMgoIC03/nbGxs7rXV5XPU5e/I1sevl1a02Ww6ffq0wsLCZLFYanzthWUYCwoKFBQU5OyoTQp9p+/0vXaGYejMmTOKiopycrqmJSoqSgUFBWrZsmWtn6PwXJ78eYK6u5TPUZcvZBtqacWQkJBLet+goCCP/SOk7/Td01xq34ODg52Ypmny8vJS27ZtzY4BF+HJnyeom7p+jrr8w16/XFrxggtLKyYkJJiYDAAAAM7k8ndkJZZWBAAA8ERuUcg25tKK/v7+mjt37kVDEzwBfafvnsaT+w44A39TaGgWw/CwOWIAAADgFlx+jCwAAAA8E4UsAAAAXBKFLAAAAFwShSwAAABcEoXsJcjIyFD79u0VEBCg+Ph4ff7552ZHanDp6enq16+fWrZsqfDwcI0ZM0b5+fkO55w/f14pKSkKCwtTixYtlJycfNGCFO7g2WeflcVi0YwZM+zH3Lnv33//ve666y6FhYUpMDBQPXv21O7du+3thmFozpw5atOmjQIDA5WYmKhDhw6ZmLjhVFZWavbs2YqNjVVgYKA6duyop556ymGdb3fuPwC4KgrZOlqzZo1SU1M1d+5cffHFF7r66quVlJSkEydOmB2tQeXk5CglJUU7duzQ5s2bVV5eruHDh+vcuXP2c2bOnKkNGzZo7dq1ysnJ0bFjxzR27FgTUze8Xbt26bXXXlOvXr0cjrtr33/88UcNGDBAvr6++uijj7R//369+OKLatWqlf2chQsXavHixVq2bJl27typ5s2bKykpSefPnzcxecN47rnntHTpUr3yyis6cOCAnnvuOS1cuFBLliyxn+PO/QcAl2WgTq699lojJSXFvl9ZWWlERUUZ6enpJqZyvhMnThiSjJycHMMwDKO4uNjw9fU11q5daz/nwIEDhiQjNzfXrJgN6syZM0bnzp2NzZs3G4MHDzamT59uGIZ79/2xxx4zBg4cWG27zWYzIiMjjeeff95+rLi42PD39zfefffdxojoVKNGjTImTpzocGzs2LHG+PHjDcNw//4DgKvijmwdlJWVKS8vT4mJifZjXl5eSkxMVG5uronJnK+kpESSFBoaKknKy8tTeXm5w+8iLi5OMTExbvO7SElJ0ahRoxz6KLl337OystS3b1/ddtttCg8PV+/evfX666/b248cOaLCwkKHvgcHBys+Pt7l+y5J1113nbKzs3Xw4EFJ0pdffqnt27dr5MiRkty//wDgqtxiZS9n++GHH1RZWXnRSmERERH65ptvTErlfDabTTNmzNCAAQN01VVXSZIKCwvl5+enkJAQh3MjIiJUWFhoQsqGtXr1an3xxRfatWvXRW3u3Pd//vOfWrp0qVJTU/XEE09o165deuihh+Tn56cJEybY+1fV34Cr912SHn/8cVmtVsXFxcnb21uVlZVasGCBxo8fL0lu338AcFUUsqhWSkqK9u3bp+3bt5sdpVEUFBRo+vTp2rx5swICAsyO06hsNpv69u2rZ555RpLUu3dv7du3T8uWLdOECRNMTud87733nt555x1lZmaqR48e2rNnj2bMmKGoqCiP6D8AuCqGFtTBFVdcIW9v74ueTi8qKlJkZKRJqZxr6tSp2rhxoz799FO1bdvWfjwyMlJlZWUqLi52ON8dfhd5eXk6ceKEfvOb38jHx0c+Pj7KycnR4sWL5ePjo4iICLfte5s2bdS9e3eHY926ddPRo0clyd4/d/0beOSRR/T4449r3Lhx6tmzp+6++27NnDlT6enpkty//wDgqihk68DPz099+vRRdna2/ZjNZlN2drYSEhJMTNbwDMPQ1KlTtW7dOm3ZskWxsbEO7X369JGvr6/D7yI/P19Hjx51+d/FsGHD9NVXX2nPnj32rW/fvho/frz9Z3ft+4ABAy6aZu3gwYNq166dJCk2NlaRkZEOfbdardq5c6fL912SfvrpJ3l5OX4cent7y2azSXL//gOAyzL7aTNXsXr1asPf399YtWqVsX//fmPy5MlGSEiIUVhYaHa0BjVlyhQjODjY2Lp1q3H8+HH79tNPP9nP+f3vf2/ExMQYW7ZsMXbv3m0kJCQYCQkJJqZ2nl/OWmAY7tv3zz//3PDx8TEWLFhgHDp0yHjnnXeMZs2aGW+//bb9nGeffdYICQkxPvjgA2Pv3r3GrbfeasTGxho///yzickbxoQJE4wrr7zS2Lhxo3HkyBHj/fffN6644grj0UcftZ/jzv0HAFdFIXsJlixZYsTExBh+fn7Gtddea+zYscPsSA1OUpXbypUr7ef8/PPPxn/+538arVq1Mpo1a2b89re/NY4fP25eaCf6dSHrzn3fsGGDcdVVVxn+/v5GXFycsXz5cod2m81mzJ4924iIiDD8/f2NYcOGGfn5+SalbVhWq9WYPn26ERMTYwQEBBgdOnQw/vjHPxqlpaX2c9y5/wDgqiyG8YulawAAAAAXwRhZAAAAuCQKWQAAALgkClkAAAC4JApZAAAAuCQKWQAAALgkClkAAAC4JApZAAAAuCQKWQAAALgkClkAAAC4JApZeLzc3Fx5e3tr1KhRZkcBAACXgCVq4fHuv/9+tWjRQitWrFB+fr6ioqLMjgQAAOqAO7LwaGfPntWaNWs0ZcoUjRo1SqtWrXJoz8rKUufOnRUQEKAbbrhBb775piwWi4qLi+3nbN++Xddff70CAwMVHR2thx56SOfOnWvcjgAA4IEoZOHR3nvvPcXFxalr166666679MYbb+jClxRHjhzR7373O40ZM0ZffvmlHnzwQf3xj390eP23336rESNGKDk5WXv37tWaNWu0fft2TZ061YzuAADgURhaAI82YMAA3X777Zo+fboqKirUpk0brV27VkOGDNHjjz+uv/71r/rqq6/s58+aNUsLFizQjz/+qJCQEN1///3y9vbWa6+9Zj9n+/btGjx4sM6dO6eAgAAzugUAgEfgjiw8Vn5+vj7//HPdeeedkiQfHx/dcccdWrFihb29X79+Dq+59tprHfa//PJLrVq1Si1atLBvSUlJstlsOnLkSON0BAAAD+VjdgDALCtWrFBFRYXDw12GYcjf31+vvPJKna5x9uxZPfjgg3rooYcuaouJiWmwrAAA4GIUsvBIFRUVeuutt/Tiiy9q+PDhDm1jxozRu+++q65du+rDDz90aNu1a5fD/m9+8xvt379fnTp1cnpmAADgiDGy8Ejr16/XHXfcoRMnTig4ONih7bHHHtOWLVv03nvvqWvXrpo5c6YmTZqkPXv26OGHH9Z3332n4uJiBQcHa+/everfv78mTpyo+++/X82bN9f+/fu1efPmOt/VBQAA9cMYWXikFStWKDEx8aIiVpKSk5O1e/dunTlzRn/5y1/0/vvvq1evXlq6dKl91gJ/f39JUq9evZSTk6ODBw/q+uuvV+/evTVnzhzmogUAoBFwRxa4BAsWLNCyZctUUFBgdhQAADweY2SBGrz66qvq16+fwsLC9I9//EPPP/88c8QCANBEUMgCNTh06JCefvppnT59WjExMXr44YeVlpZmdiwAACCGFgAAAMBF8bAXAAAAXBKFLAAAAFwShSwAAABcEoUsAAAAXBKFLAAAAFwShSwAAABcEoUsAAAAXBKFLAAAAFzS/wfHb1H7jyLzlAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "sns.histplot(cleaned_titanic_train, x='Age', ax=axes[0])\n",
    "sns.boxplot(cleaned_titanic_train, y='Age', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 乘客年龄与是否幸存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAFUCAYAAADYjN+CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+CUlEQVR4nO3de1TUdf7H8dcoN0kZQpJLC0pmipbmlUh306QMrTRty13saJqViTc8lZRYubVWdrGLyVYqtmqWm5pl2c/wXnjD0Cy8RuEWA5GOCAQifH9/uMw2K5oyAzMDz8c5c47z/X7nM+/5NNLLL5+LyTAMQwAAAICHaeLqAgAAAIDaIMgCAADAIxFkAQAA4JEIsgAAAPBIBFkAAAB4JIIsAAAAPBJBFgAAAB6JIAsAAACP5OXqAtxBVVWVfvrpJ7Vo0UImk8nV5QAAADRahmHo5MmTCg8PV5Mm57/nSpCV9NNPPykiIsLVZQAAAOA/jh49qj/84Q/nvYYgK6lFixaSznRYQECAi6sBAABovIqKihQREWHLZ+dDkJVswwkCAgIIsgAAAG7gQoZ7MtkLAAAAHokgCwAAAI9EkAUAAIBHYowsAABAHaqsrFRFRYWry3Ab3t7eatq0qVPaIsgCAADUAcMwZLFYZLVaXV2K2wkMDFRoaKjD6/cTZAEAAOpAdYht1aqV/P392XRJZ8J9aWmpCgoKJElhYWEOtefSILt582bNnj1bmZmZysvL08qVKzVkyBC7a7Kzs/Xoo49q06ZNOn36tDp27KgPPvhAkZGRkqSysjJNnTpVy5YtU3l5uQYMGKA33nhDISEhLvhEAAAAZ4YTVIfYli1buroct9KsWTNJUkFBgVq1auXQMAOXTvYqKSlRly5dNHfu3BrPHzlyRH369FGHDh20ceNG7d27VykpKfLz87NdM2XKFH300Udavny5Nm3apJ9++klDhw6tr48AAABwluoxsf7+/i6uxD1V94ujY4ddekc2Pj5e8fHx5zz/+OOPa+DAgXr++edtx9q2bWv784kTJzR//nwtXbpUN954oyRp4cKFio6O1rZt23TdddfVXfEAAAC/g+EENXNWv7jtGNmqqiqtWbNGjzzyiAYMGKCvvvpKUVFRSk5Otg0/yMzMVEVFheLi4myv69ChgyIjI5WRkXHOIFteXq7y8nLb86Kiojr9LAAck5ubq8LCQqe0FRwcbBuaBADwbG4bZAsKClRcXKxnn31WTz/9tJ577jmtXbtWQ4cO1YYNG3TDDTfIYrHIx8dHgYGBdq8NCQmRxWI5Z9uzZs3SU089VcefAIAz5ObmKjo6WqWlpU5pz9/fX9nZ2YRZAI3Sxo0b1a9fPx0/fvys/ORMo0aNktVq1apVq+rsPSQ3DrJVVVWSpMGDB2vKlCmSpGuvvVZffvmlUlNTdcMNN9S67eTkZCUlJdmeFxUVKSIiwrGCAdSJwsJClZaWavbcNLW9Ktqhto4czNbD40epsLCQIAvApX7++WfNmDFDa9asUX5+vi699FJ16dJFM2bMUO/evevsfa+//nrl5eXJbDbX2XvUJ7cNssHBwfLy8lLHjh3tjkdHR2vr1q2SpNDQUJ06dUpWq9XuXxX5+fkKDQ09Z9u+vr7y9fWtk7oB1I22V0WrU+euri4DAJxi2LBhOnXqlBYtWqQrrrhC+fn5Sk9P1y+//FKr9gzDUGVlpby8zh/tfHx8zpuRPI3bblHr4+Ojnj176sCBA3bHDx48qNatW0uSunfvLm9vb6Wnp9vOHzhwQLm5uYqNja3XegEAAC6E1WrVli1b9Nxzz6lfv35q3bq1evXqpeTkZN1+++36/vvvZTKZlJWVZfcak8mkjRs3SjozRMBkMunTTz9V9+7d5evrqwULFshkMmn//v127/fyyy/bJstXv85qtaqoqEjNmjXTp59+anf9ypUr1aJFC9uQrqNHj+quu+5SYGCggoKCNHjwYH3//fe26ysrK5WUlKTAwEC1bNlSjzzyiAzDcH7H1cClQba4uFhZWVm2/1A5OTnKyspSbm6uJOnhhx/We++9p7feekuHDx/W66+/ro8++kgPPfSQJMlsNmvMmDFKSkrShg0blJmZqXvvvVexsbGsWAAAANxS8+bN1bx5c61atcpu8nltTJs2Tc8++6yys7N15513qkePHlqyZIndNUuWLNFf//rXs14bEBCgW2+9VUuXLj3r+iFDhsjf318VFRUaMGCAWrRooS1btuiLL75Q8+bNdcstt+jUqVOSpBdffFFpaWlasGCBtm7dqmPHjmnlypUOfa4L5dIgu2vXLnXt2lVdu575dWFSUpK6du2qGTNmSJLuuOMOpaam6vnnn9c111yjt99+Wx988IH69Olja+Pll1/WrbfeqmHDhulPf/qTQkNDtWLFCpd8HgAAgN/j5eWltLQ0LVq0SIGBgerdu7cee+wx7d2796Lbmjlzpm666Sa1bdtWQUFBSkhI0Lvvvms7f/DgQWVmZiohIaHG1yckJGjVqlW2u69FRUVas2aN7fr33ntPVVVVevvtt3XNNdcoOjpaCxcuVG5uru3u8Jw5c5ScnKyhQ4cqOjpaqamp9TYG16VBtm/fvjIM46xHWlqa7ZrRo0fr0KFD+vXXX5WVlaXBgwfbteHn56e5c+fq2LFjKikp0YoVKxrU2A8AANDwDBs2TD/99JNWr16tW265RRs3blS3bt3sMtCF6NGjh93z4cOH6/vvv9e2bdsknbm72q1bN3Xo0KHG1w8cOFDe3t5avXq1JOmDDz5QQECAbWnTPXv26PDhw2rRooXtTnJQUJDKysp05MgRnThxQnl5eYqJibG16eXldVZddcVtx8gCAAA0ZH5+frrpppuUkpKiL7/8UqNGjdITTzyhJk3OxLPfjjM91w5Yl1xyid3z0NBQ3XjjjbbhAkuXLj3n3VjpzJykO++80+76u+++2zZprLi4WN27d7cNBa1+HDx4sMbhCvWNIAsAAOAGOnbsqJKSEl122WWSpLy8PNu53078+j0JCQl67733lJGRoe+++07Dhw//3evXrl2rb775RuvXr7cLvt26ddOhQ4fUqlUrXXnllXYPs9kss9mssLAwbd++3faa06dPKzMz84LrdQRBFgAAoB798ssvuvHGG7V48WLt3btXOTk5Wr58uZ5//nkNHjxYzZo103XXXWebxLVp0yZNnz79gtsfOnSoTp48qXHjxqlfv34KDw8/7/XVc4wSEhIUFRVlN0wgISFBwcHBGjx4sLZs2aKcnBxt3LhREydO1L///W9J0qRJk/Tss89q1apV2r9/vx566CFZrdZa9c3FIsgCAADUo+bNmysmJkYvv/yy/vSnP+nqq69WSkqKxo4dq9dff12StGDBAp0+fVrdu3fX5MmT9fTTT19w+y1atNBtt92mPXv2nHdYQTWTyaS//OUvNV7v7++vzZs3KzIy0jaZa8yYMSorK1NAQIAkaerUqbrnnns0cuRIxcbGqkWLFrrjjjsuokdqz2TU10JfbqyoqEhms1knTpyw/UcB4B52796t7t27a8W67Q5viPDN3q809KYYZWZmqlu3bk6qEADOVlZWppycHEVFRcnPz8/V5bid8/XPxeQy7sgCAADAIxFkAQAA4JEIsgAAAPBIBFkAAAB4JIIsAAAAPBJBFgAAAB6JIAsAAACPRJAFAACARyLIAgAAwCN5uboAAAAASLm5uSosLKy39wsODlZkZORFv27u3LmaPXu2LBaLunTpotdee029evWqgwp/H0EWAADAxXJzcxUdHa3S0tJ6e09/f39lZ2dfVJh97733lJSUpNTUVMXExGjOnDkaMGCADhw4oFatWtVhtTUjyAIAALhYYWGhSktLNXtumtpeFV3n73fkYLYeHj9KhYWFFxVkX3rpJY0dO1b33nuvJCk1NVVr1qzRggULNG3atLoq95wIsgAAAG6i7VXR6tS5q6vLqNGpU6eUmZmp5ORk27EmTZooLi5OGRkZLqmJyV4AAAD4XYWFhaqsrFRISIjd8ZCQEFksFpfURJAFAACARyLIAgAA4HcFBweradOmys/Ptzuen5+v0NBQl9REkAUAAMDv8vHxUffu3ZWenm47VlVVpfT0dMXGxrqkJpcG2c2bN+u2225TeHi4TCaTVq1adc5rH3zwQZlMJs2ZM8fu+LFjx5SQkKCAgAAFBgZqzJgxKi4urtvCAQAAGqGkpCS99dZbWrRokbKzszVu3DiVlJTYVjGoby5dtaCkpERdunTR6NGjNXTo0HNet3LlSm3btk3h4eFnnUtISFBeXp7WrVuniooK3Xvvvbr//vu1dOnSuiwdAADA6Y4czHbr97n77rv1888/a8aMGbJYLLr22mu1du3asyaA1ReXBtn4+HjFx8ef95off/xREyZM0GeffaZBgwbZncvOztbatWu1c+dO9ejRQ5L02muvaeDAgXrhhRdqDL4AAADuJjg4WP7+/np4/Kh6e09/f38FBwdf9OsSExOVmJhYBxVdPLdeR7aqqkr33HOPHn74YXXq1Oms8xkZGQoMDLSFWEmKi4tTkyZNtH37dt1xxx01tlteXq7y8nLb86KiIucXDwAAcIEiIyOVnZ3tEVvUuhO3DrLPPfecvLy8NHHixBrPWyyWs7ZD8/LyUlBQ0HnXM5s1a5aeeuopp9YKAADgiMjISI8PlvXNbVctyMzM1CuvvKK0tDSZTCantp2cnKwTJ07YHkePHnVq+wAAAKh7bhtkt2zZooKCAkVGRsrLy0teXl764YcfNHXqVLVp00aSFBoaqoKCArvXnT59WseOHTvvema+vr4KCAiwewAAAMCzuO3QgnvuuUdxcXF2xwYMGKB77rnHtsRDbGysrFarMjMz1b17d0nS+vXrVVVVpZiYmHqvGQAAAPXHpUG2uLhYhw8ftj3PyclRVlaWgoKCFBkZqZYtW9pd7+3trdDQULVv316SFB0drVtuuUVjx45VamqqKioqlJiYqOHDh7NiAQAAQAPn0qEFu3btUteuXdW1a1dJZxbZ7dq1q2bMmHHBbSxZskQdOnRQ//79NXDgQPXp00dvvvlmXZUMAAAAN+HSO7J9+/aVYRgXfP33339/1rGgoCA2PwAAAGiE3HayFwAAAHA+BFkAAAB4JLddtQAAAKAxyc3NdfudvTZv3qzZs2crMzNTeXl5WrlypYYMGVI3BV4AgiwAAICL5ebmKjo6WqWlpfX2nv7+/srOzr6oMFtSUqIuXbpo9OjRGjp0aB1Wd2EIsgAAAC5WWFio0tJSLZ7zN0VfGVXn75d9OEcjJqeosLDwooJsfHy84uPj67Cyi0OQBQAAcBPRV0ap2zXRri7DYzDZCwAAAB6JIAsAAACPRJAFAACARyLIAgAAwCMx2QsAAAAXpLi4WIcPH7Y9z8nJUVZWloKCgi56TVpnIMgCAAC4iezDOW79Prt27VK/fv1sz5OSkiRJI0eOVFpamjNKuygEWQAAABcLDg6Wv7+/RkxOqbf39Pf3V3Bw8EW9pm/fvjIMo44qungEWQAAABeLjIxUdna2229R624IsgAAAG4gMjLS44NlfWPVAgAAAHgkgiwAAAA8EkEWAAAAHokgCwAAUEfcaYa/O3FWvxBkAQAAnMzb21uSVFpa6uJK3FN1v1T3U22xagEAAICTNW3aVIGBgSooKJB0Zs1Wk8nk4qpczzAMlZaWqqCgQIGBgWratKlD7RFkAQAA6kBoaKgk2cIs/iswMNDWP45waZDdvHmzZs+erczMTOXl5WnlypUaMmSIJKmiokLTp0/XJ598ou+++05ms1lxcXF69tlnFR4ebmvj2LFjmjBhgj766CM1adJEw4YN0yuvvKLmzZu76FMBAABIJpNJYWFhatWqlSoqKlxdjtvw9vZ2+E5sNZcG2ZKSEnXp0kWjR4/W0KFD7c6VlpZq9+7dSklJUZcuXXT8+HFNmjRJt99+u3bt2mW7LiEhQXl5eVq3bp0qKip077336v7779fSpUvr++MAAACcpWnTpk4LbrDn0iAbHx+v+Pj4Gs+ZzWatW7fO7tjrr7+uXr16KTc317aV29q1a7Vz50716NFDkvTaa69p4MCBeuGFF+zu3AIAAKBh8ahVC06cOCGTyaTAwEBJUkZGhgIDA20hVpLi4uLUpEkTbd++/ZztlJeXq6ioyO4BAAAAz+IxQbasrEyPPvqo/vKXvyggIECSZLFY1KpVK7vrvLy8FBQUJIvFcs62Zs2aJbPZbHtERETUae0AAABwPo8IshUVFbrrrrtkGIbmzZvncHvJyck6ceKE7XH06FEnVAkAAID65PbLb1WH2B9++EHr16+33Y2Vzixr8b9LWpw+fVrHjh0775IOvr6+8vX1rbOaAQAAUPfc+o5sdYg9dOiQPv/8c7Vs2dLufGxsrKxWqzIzM23H1q9fr6qqKsXExNR3uQAAAKhHLr0jW1xcrMOHD9ue5+TkKCsrS0FBQQoLC9Odd96p3bt36+OPP1ZlZaVt3GtQUJB8fHwUHR2tW265RWPHjlVqaqoqKiqUmJio4cOHs2IBAABAA+fSILtr1y7169fP9jwpKUmSNHLkSD355JNavXq1JOnaa6+1e92GDRvUt29fSdKSJUuUmJio/v372zZEePXVV+ulfgAAALiOS4Ns3759ZRjGOc+f71y1oKAgNj8AAABohNx6jCwAAABwLgRZAAAAeCSCLAAAADwSQRYAAAAeiSALAAAAj0SQBQAAgEciyAIAAMAjEWQBAADgkQiyAAAA8EgEWQAAAHgkgiwAAAA8EkEWAAAAHokgCwAAAI9EkAUAAIBHIsgCAADAIxFkAQAA4JEIsgAAAPBIBFkAAAB4JIIsAAAAPBJBFgAAAB6JIAsAAACPRJAFAACAR3JpkN28ebNuu+02hYeHy2QyadWqVXbnDcPQjBkzFBYWpmbNmikuLk6HDh2yu+bYsWNKSEhQQECAAgMDNWbMGBUXF9fjpwAAAIAruDTIlpSUqEuXLpo7d26N559//nm9+uqrSk1N1fbt23XJJZdowIABKisrs12TkJCgb775RuvWrdPHH3+szZs36/7776+vjwAAAAAX8XLlm8fHxys+Pr7Gc4ZhaM6cOZo+fboGDx4sSXrnnXcUEhKiVatWafjw4crOztbatWu1c+dO9ejRQ5L02muvaeDAgXrhhRcUHh5eb58FAAAA9cttx8jm5OTIYrEoLi7OdsxsNismJkYZGRmSpIyMDAUGBtpCrCTFxcWpSZMm2r59+znbLi8vV1FRkd0DAAAAnsVtg6zFYpEkhYSE2B0PCQmxnbNYLGrVqpXdeS8vLwUFBdmuqcmsWbNkNpttj4iICCdXDwAAgLrmtkG2LiUnJ+vEiRO2x9GjR11dEgAAAC6S2wbZ0NBQSVJ+fr7d8fz8fNu50NBQFRQU2J0/ffq0jh07ZrumJr6+vgoICLB7AAAAwLO4bZCNiopSaGio0tPTbceKioq0fft2xcbGSpJiY2NltVqVmZlpu2b9+vWqqqpSTExMvdcMAACA+uPSVQuKi4t1+PBh2/OcnBxlZWUpKChIkZGRmjx5sp5++mm1a9dOUVFRSklJUXh4uIYMGSJJio6O1i233KKxY8cqNTVVFRUVSkxM1PDhw1mxAAAAoIFzaZDdtWuX+vXrZ3uelJQkSRo5cqTS0tL0yCOPqKSkRPfff7+sVqv69OmjtWvXys/Pz/aaJUuWKDExUf3791eTJk00bNgwvfrqq/X+WQAAAFC/XBpk+/btK8MwznneZDJp5syZmjlz5jmvCQoK0tKlS+uiPAAAALgxtx0jCwAAAJxPrYLsFVdcoV9++eWs41arVVdccYXDRQEAAAC/p1ZB9vvvv1dlZeVZx8vLy/Xjjz86XBQAAADwey5qjOzq1attf/7ss89kNpttzysrK5Wenq42bdo4rTgAAADgXC4qyFYve2UymTRy5Ei7c97e3mrTpo1efPFFpxUHAAAAnMtFBdmqqipJZzYr2Llzp4KDg+ukKAAAAOD31Gr5rZycHGfXAQAAAFyUWq8jm56ervT0dBUUFNju1FZbsGCBw4UBAAAA51OrIPvUU09p5syZ6tGjh8LCwmQymZxdFwAAAHBetQqyqampSktL0z333OPsegAAAIALUqt1ZE+dOqXrr7/e2bUAAAAAF6xWQfa+++7T0qVLnV0LAAAAcMFqNbSgrKxMb775pj7//HN17txZ3t7edudfeuklpxQHAAAAnEutguzevXt17bXXSpL27dtnd46JXwAAAKgPtQqyGzZscHYdAAAAwEWp1RhZAAAAwNVqdUe2X79+5x1CsH79+loXBAAAAFyIWgXZ6vGx1SoqKpSVlaV9+/Zp5MiRzqgLAAAAOK9aBdmXX365xuNPPvmkiouLHSoIAAAAuBBOHSM7YsQILViwwJlNAgAAADVyapDNyMiQn5+fM5sEAAAAalSroQVDhw61e24YhvLy8rRr1y6lpKQ4pTBJqqys1JNPPqnFixfLYrEoPDxco0aN0vTp022TzQzD0BNPPKG33npLVqtVvXv31rx589SuXTun1QEAAAD3U6sgazab7Z43adJE7du318yZM3XzzTc7pTBJeu655zRv3jwtWrRInTp10q5du3TvvffKbDZr4sSJkqTnn39er776qhYtWqSoqCilpKRowIAB+vbbb7k7DAAA0IDVKsguXLjQ2XXU6Msvv9TgwYM1aNAgSVKbNm307rvvaseOHZLO3I2dM2eOpk+frsGDB0uS3nnnHYWEhGjVqlUaPnx4vdQJAACA+ufQGNnMzEwtXrxYixcv1ldffeWsmmyuv/56paen6+DBg5KkPXv2aOvWrYqPj5ck5eTkyGKxKC4uzvYas9msmJgYZWRkOL0eAAAAuI9a3ZEtKCjQ8OHDtXHjRgUGBkqSrFar+vXrp2XLlumyyy5zSnHTpk1TUVGROnTooKZNm6qyslLPPPOMEhISJEkWi0WSFBISYve6kJAQ27malJeXq7y83Pa8qKjIKfUCAACg/tTqjuyECRN08uRJffPNNzp27JiOHTumffv2qaioyDZ21Rnef/99LVmyREuXLtXu3bu1aNEivfDCC1q0aJFD7c6aNUtms9n2iIiIcFLFAAAAqC+1uiO7du1aff7554qOjrYd69ixo+bOnevUyV4PP/ywpk2bZhvres011+iHH37QrFmzNHLkSIWGhkqS8vPzFRYWZntdfn7+WbuP/VZycrKSkpJsz4uKigizgJuzWPLUIrClw20AABqOWgXZqqoqeXt7n3Xc29tbVVVVDhdVrbS0VE2a2N80btq0qe09oqKiFBoaqvT0dFtwLSoq0vbt2zVu3Lhztuvr6ytfX1+n1Qmg7uTlnQmf8+fPV4vAYIfaOmkttGsTAODZahVkb7zxRk2aNEnvvvuuwsPDJUk//vijpkyZov79+zutuNtuu03PPPOMIiMj1alTJ3311Vd66aWXNHr0aEmSyWTS5MmT9fTTT6tdu3a25bfCw8M1ZMgQp9UBwHWsVqskafBNfRUb08uhtjK271Dmxo9sbQIAPFutguzrr7+u22+/XW3atLH9Sv7o0aO6+uqrtXjxYqcV99prryklJUUPPfSQCgoKFB4ergceeEAzZsywXfPII4+opKRE999/v6xWq/r06aO1a9eyhizQwAQHmRV5edjvX3geh4LMv38RAMBj1CrIRkREaPfu3fr888+1f/9+SVJ0dLTdMljO0KJFC82ZM0dz5sw55zUmk0kzZ87UzJkznfreAAAAcG8XtWrB+vXr1bFjRxUVFclkMummm27ShAkTNGHCBPXs2VOdOnXSli1b6qpWAAAAwOaiguycOXM0duxYBQQEnHXObDbrgQce0EsvveS04gAAAIBzuaggu2fPHt1yyy3nPH/zzTcrMzPT4aIAAACA33NRQTY/P7/GZbeqeXl56eeff3a4KAAAAOD3XFSQvfzyy7Vv375znt+7d6/dxgQAAABAXbmoIDtw4EClpKSorKzsrHO//vqrnnjiCd16661OKw4AAAA4l4tafmv69OlasWKFrrrqKiUmJqp9+/aSpP3792vu3LmqrKzU448/XieFAgAAAL91UUE2JCREX375pcaNG6fk5GQZhiHpzFquAwYM0Ny5cxUSElInhQIAAAC/ddEbIrRu3VqffPKJjh8/rsOHD8swDLVr106XXnppXdQHAAAA1KhWO3tJ0qWXXqqePXs6sxYAAADggl3UZC8AAADAXRBkAQAA4JEIsgAAAPBIBFkAAAB4JIIsAAAAPBJBFgAAAB6JIAsAAACPRJAFAACARyLIAgAAwCMRZAEAAOCRCLIAAADwSARZAAAAeCS3D7I//vijRowYoZYtW6pZs2a65pprtGvXLtt5wzA0Y8YMhYWFqVmzZoqLi9OhQ4dcWDEAAADqg1sH2ePHj6t3797y9vbWp59+qm+//VYvvviiLr30Uts1zz//vF599VWlpqZq+/btuuSSSzRgwACVlZW5sHIAAADUNS9XF3A+zz33nCIiIrRw4ULbsaioKNufDcPQnDlzNH36dA0ePFiS9M477ygkJESrVq3S8OHD671mAAAA1A+3viO7evVq9ejRQ3/+85/VqlUrde3aVW+99ZbtfE5OjiwWi+Li4mzHzGazYmJilJGR4YqSAQAAUE/cOsh+9913mjdvntq1a6fPPvtM48aN08SJE7Vo0SJJksVikSSFhITYvS4kJMR2ribl5eUqKiqyewAAAMCzuPXQgqqqKvXo0UN///vfJUldu3bVvn37lJqaqpEjR9a63VmzZumpp55yVpkAAABwAbe+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JSUl9ftBAMDJCLIA4Obef/99dejQQe3bt9eIESO0YMECVf8yLScnR3feeaeGDBmiPXv26IEHHtDjjz9u9/ojR47olltu0bBhw7R3716999572rp1qxITE13xcQDAaRhaAABurnfv3rrrrrs0adIknT59WmFhYVq+fLn69u2radOmac2aNfr6669t10+fPl3PPPOMjh8/rsDAQN13331q2rSp/vGPf9iu2bp1q2644QaVlJTIz8/PFR8LABzGHVkAcGMHDhzQjh079Je//EWS5OXlpbvvvlvz58+3ne/Zs6fda3r16mX3fM+ePUpLS1Pz5s1tjwEDBqiqqko5OTn180EAoA54uboAAMC5zZ8/X6dPn7ab3GUYhnx9ffX6669fUBvFxcV64IEHNHHixLPORUZGOq1WAKhvBFkAcFOnT5/WO++8oxdffFE333yz3bkhQ4bo3XffVfv27fXJJ5/Yndu5c6fd827duunbb7/VlVdeWec1A0B9YowsALipVatW6e6771ZBQYHMZrPduUcffVTr16/X+++/r/bt22vKlCkaM2aMsrKyNHXqVP373/+W1WqV2WzW3r17dd1112n06NG67777dMkll+jbb7/VunXrLviuLgC4I8bIAoCbmj9/vuLi4s4KsZI0bNgw7dq1SydPntS//vUvrVixQp07d9a8efNsqxb4+vpKkjp37qxNmzbp4MGD+uMf/6iuXbtqxowZrEULwONxRxYAGphnnnlGqampOnr0qKtLAYA6xRhZAPBwb7zxhnr27KmWLVvqiy++0OzZs1kjFkCjQJAFAA936NAhPf300zp27JgiIyM1depUJScnu7osAKhzDC0AAACAR2KyFwAAADwSQRYAAAAeiSALAAAAj0SQBQAAgEciyAIAAMAjEWQBAADgkQiyAAAA8EgEWQAAAHgkgiwAAAA80v8DqetDTE0Gs6QAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 700x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.histplot(cleaned_titanic_train, x='Age', hue='Survived', alpha=0.4)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 船票金额分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAKyCAYAAAA6kpdwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABcxElEQVR4nO39e5SV5X03/r9ngBkRmSEYmZEIeEQkeIiH4DTxEEXRUBsr61nBEiXWR1MLPlEam9CvUWMOWNsm1hQxaa2mrYTGPjEHY1TECG0EleGhAUxQUiOmOmC0MEJkgJn9+yM/dzthtnIYZs8eX6+17rXmvj7X3vtzcwts31z72lWFQqEQAAAAAABgJ9XlbgAAAAAAAHorIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAl9C93A71BR0dHXnrppQwePDhVVVXlbgcAgD6sUCjk9ddfz/Dhw1NdbU3L/+R9OQAAPWlX35sL0ZO89NJLGTFiRLnbAADgHeTFF1/MIYccUu42ehXvywEAKIe3e28uRE8yePDgJL/5xaqrqytzNwAA9GWtra0ZMWJE8T0o/837cgAAetKuvjcXoifFj4rW1dV5sw4AQI+wXcnOvC8HAKAc3u69uU0YAQAAAACgBCE6AAAAAACUIEQHAAAAAIAShOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACgBCE6AAAAAACUIEQHAAAAAIAShOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACgBCE6AAAAAACUIEQHAAAAAIAShOgAAAAAAFBC/3I3AAAAAMCe++Y3v5lVq1Zl3Lhxufjii8vdDkCfYyU6AAAAQIXauHFjVq1alSRZtWpVNm7cWN6GAPogIToAAABAhfr617/+lucA7D0hOgAAAEAFWr58eTZt2tRpbNOmTVm+fHmZOgLom4ToAAAAABWmvb09999/f5e1+++/P+3t7T3cEUDfJUQHAAAAqDDLli1LR0dHl7WOjo4sW7ashzsC6Lv6l7sBdtbW1lbyo1cnnnhiamtre7gjAAAAoDc5+eST88ADD3QZpFdXV+fkk08uQ1cAfZMQvRdavnx55j/SnENHj+s0/otnf/Nt201NTeVoCwAAAOgl+vXrl9///d/P//2//3en2kUXXZR+/fqVoSuAvkmI3ksdOnpcxp4wvtxtAAAAAL3UiSeemEcffbTTl4vW19fnfe97Xxm7Auh77IkOAAAAUKGuvPLKtzwHYO8J0QEAAAAq1JAhQzJu3G+2gx03blyGDBlS3oYA+iDbuQAAAABUsIsvvrjcLQD0aVaiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAOAd7qabbkpVVVWnY8yYMcX61q1bM3369Bx44IE54IADMnny5Kxfv77Tc6xbty6TJk3K/vvvn2HDhuW6667Ljh07evpSAACg2/liUQAAIO9973vz6KOPFs/79//v/1W49tpr84Mf/CD33Xdf6uvrM2PGjFx00UX58Y9/nCRpb2/PpEmT0tjYmCeeeCIvv/xyLr300gwYMCBf+tKXevxaAACgOwnRAQCA9O/fP42NjTuNb9q0KXfddVfmzZuXs846K0ly991355hjjsnSpUtz6qmn5pFHHskzzzyTRx99NA0NDTnhhBPy+c9/Pp/+9Kdz0003paampqcvBwAAuo3tXAAAgDz33HMZPnx4Dj/88EydOjXr1q1LkjQ3N2f79u2ZMGFCce6YMWMycuTILFmyJEmyZMmSHHvssWloaCjOmThxYlpbW7N69eqSr9nW1pbW1tZOBwAA9DZCdAAAeIcbP3587rnnnjz00EOZO3dunn/++Zx22ml5/fXX09LSkpqamgwZMqTTYxoaGtLS0pIkaWlp6RSgv1l/s1bK7NmzU19fXzxGjBjRvRcGAADdwHYuAADwDnf++ecXfz7uuOMyfvz4jBo1Kt/61rcycODAffa6s2bNysyZM4vnra2tgnQAAHodK9EBAIBOhgwZktGjR2ft2rVpbGzMtm3bsnHjxk5z1q9fX9xDvbGxMevXr9+p/matlNra2tTV1XU6AACgtxGiAwAAnWzevDk///nPc/DBB+ekk07KgAEDsnDhwmJ9zZo1WbduXZqampIkTU1NWblyZTZs2FCcs2DBgtTV1WXs2LE93j8AAHQn27kAAMA73Kc+9alccMEFGTVqVF566aXceOON6devXy6++OLU19fn8ssvz8yZMzN06NDU1dXl6quvTlNTU0499dQkybnnnpuxY8fmkksuya233pqWlpZcf/31mT59empra8t8dQAAsHeE6AAA8A73y1/+MhdffHFeffXVHHTQQfngBz+YpUuX5qCDDkqSfOUrX0l1dXUmT56ctra2TJw4MXfccUfx8f369csDDzyQq666Kk1NTRk0aFCmTZuWm2++uVyXBAAA3UaIDgAA73Dz589/y/p+++2XOXPmZM6cOSXnjBo1Kg8++GB3twYAAGVnT3QAAAAAACihrCH63Llzc9xxx6Wuri51dXVpamrKD3/4w2J969atmT59eg488MAccMABmTx5ctavX9/pOdatW5dJkyZl//33z7Bhw3Lddddlx44dPX0pAAAAAAD0QWUN0Q855JDccsstaW5uzrJly3LWWWflIx/5SFavXp0kufbaa/P9738/9913XxYtWpSXXnopF110UfHx7e3tmTRpUrZt25Ynnngi3/jGN3LPPffkhhtuKNclAQAAAADQh5R1T/QLLrig0/kXv/jFzJ07N0uXLs0hhxySu+66K/PmzctZZ52VJLn77rtzzDHHZOnSpTn11FPzyCOP5Jlnnsmjjz6ahoaGnHDCCfn85z+fT3/607nppptSU1NTjssCAAAAAKCP6DV7ore3t2f+/PnZsmVLmpqa0tzcnO3bt2fChAnFOWPGjMnIkSOzZMmSJMmSJUty7LHHpqGhoThn4sSJaW1tLa5mBwAAAACAPVXWlehJsnLlyjQ1NWXr1q054IADcv/992fs2LFZsWJFampqMmTIkE7zGxoa0tLSkiRpaWnpFKC/WX+zVkpbW1va2tqK562trd10NQAAAAAA9CVlX4l+9NFHZ8WKFXnyySdz1VVXZdq0aXnmmWf26WvOnj079fX1xWPEiBH79PUAAAAAAKhMZQ/Ra2pqcuSRR+akk07K7Nmzc/zxx+ev//qv09jYmG3btmXjxo2d5q9fvz6NjY1JksbGxqxfv36n+pu1UmbNmpVNmzYVjxdffLF7LwoAAAAAgD6h7CH6b+vo6EhbW1tOOumkDBgwIAsXLizW1qxZk3Xr1qWpqSlJ0tTUlJUrV2bDhg3FOQsWLEhdXV3Gjh1b8jVqa2tTV1fX6QAAAAAAgN9W1j3RZ82alfPPPz8jR47M66+/nnnz5uXxxx/Pww8/nPr6+lx++eWZOXNmhg4dmrq6ulx99dVpamrKqaeemiQ599xzM3bs2FxyySW59dZb09LSkuuvvz7Tp09PbW1tOS8NAAAAAIA+oKwh+oYNG3LppZfm5ZdfTn19fY477rg8/PDDOeecc5IkX/nKV1JdXZ3Jkyenra0tEydOzB133FF8fL9+/fLAAw/kqquuSlNTUwYNGpRp06bl5ptvLtclAQAAAADQh5Q1RL/rrrvesr7ffvtlzpw5mTNnTsk5o0aNyoMPPtjdrQEAAAAAQO/bEx0AAAAAAHoLIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUEJZQ/TZs2fnlFNOyeDBgzNs2LBceOGFWbNmTac5Z555Zqqqqjodf/RHf9Rpzrp16zJp0qTsv//+GTZsWK677rrs2LGjJy8FAAAAAIA+qH85X3zRokWZPn16TjnllOzYsSN/9md/lnPPPTfPPPNMBg0aVJx3xRVX5Oabby6e77///sWf29vbM2nSpDQ2NuaJJ57Iyy+/nEsvvTQDBgzIl770pR69HgAAAAAA+payhugPPfRQp/N77rknw4YNS3Nzc04//fTi+P7775/GxsYun+ORRx7JM888k0cffTQNDQ054YQT8vnPfz6f/vSnc9NNN6WmpmafXgMAAAAAAH1Xr9oTfdOmTUmSoUOHdhq/99578+53vzvjxo3LrFmz8utf/7pYW7JkSY499tg0NDQUxyZOnJjW1tasXr26ZxoHAAAAAKBP6jUhekdHR6655pp84AMfyLhx44rjf/AHf5B/+qd/yo9+9KPMmjUr//iP/5iPfexjxXpLS0unAD1J8bylpaXL12pra0tra2unAwAA+I1bbrklVVVVueaaa4pjW7duzfTp03PggQfmgAMOyOTJk7N+/fpOj/NdRQAA9EVl3c7lf5o+fXpWrVqVf/u3f+s0fuWVVxZ/PvbYY3PwwQfn7LPPzs9//vMcccQRe/Ras2fPzuc+97m96hcAAPqip59+Ol/72tdy3HHHdRq/9tpr84Mf/CD33Xdf6uvrM2PGjFx00UX58Y9/nMR3FQEA0Hf1ipXoM2bMyAMPPJAf/ehHOeSQQ95y7vjx45Mka9euTZI0NjbutALmzfNS+6jPmjUrmzZtKh4vvvji3l4CAABUvM2bN2fq1Kn527/927zrXe8qjm/atCl33XVXvvzlL+ess87KSSedlLvvvjtPPPFEli5dmuS/v6von/7pn3LCCSfk/PPPz+c///nMmTMn27ZtK9clAQDAXitriF4oFDJjxozcf//9eeyxx3LYYYe97WNWrFiRJDn44IOTJE1NTVm5cmU2bNhQnLNgwYLU1dVl7NixXT5HbW1t6urqOh0AAPBON3369EyaNCkTJkzoNN7c3Jzt27d3Gh8zZkxGjhyZJUuWJNmz7yqyzSIAAJWgrNu5TJ8+PfPmzct3v/vdDB48uLiHeX19fQYOHJif//znmTdvXj784Q/nwAMPzE9+8pNce+21Of3004sfLz333HMzduzYXHLJJbn11lvT0tKS66+/PtOnT09tbW05Lw8AACrG/Pnzs3z58jz99NM71VpaWlJTU5MhQ4Z0Gm9oaCi+h9+T7yqyzSIAAJWgrCvR586dm02bNuXMM8/MwQcfXDz++Z//OUlSU1OTRx99NOeee27GjBmTP/mTP8nkyZPz/e9/v/gc/fr1ywMPPJB+/fqlqakpH/vYx3LppZfm5ptvLtdlAQBARXnxxRfzyU9+Mvfee2/222+/Hntd2ywCAFAJyroSvVAovGV9xIgRWbRo0ds+z6hRo/Lggw92V1sAAPCO0tzcnA0bNuTEE08sjrW3t2fx4sX5m7/5mzz88MPZtm1bNm7c2Gk1+vr164vfQ9TY2Jinnnqq0/O+3XcV1dbW+vQoAAC9Xq/4YlEAAKB8zj777KxcuTIrVqwoHieffHKmTp1a/HnAgAFZuHBh8TFr1qzJunXr0tTUlGTPvqsIAAAqQVlXogMAAOU3ePDgjBs3rtPYoEGDcuCBBxbHL7/88sycOTNDhw5NXV1drr766jQ1NeXUU09N4ruKAADou4ToAADA2/rKV76S6urqTJ48OW1tbZk4cWLuuOOOYv3N7yq66qqr0tTUlEGDBmXatGm+qwgAgIonRAcAAHby+OOPdzrfb7/9MmfOnMyZM6fkY3xXEQAAfZE90QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoISyhuizZ8/OKaecksGDB2fYsGG58MILs2bNmk5ztm7dmunTp+fAAw/MAQcckMmTJ2f9+vWd5qxbty6TJk3K/vvvn2HDhuW6667Ljh07evJSAAAAAADog8oaoi9atCjTp0/P0qVLs2DBgmzfvj3nnntutmzZUpxz7bXX5vvf/37uu+++LFq0KC+99FIuuuiiYr29vT2TJk3Ktm3b8sQTT+Qb3/hG7rnnntxwww3luCQAAAAAAPqQ/uV88YceeqjT+T333JNhw4alubk5p59+ejZt2pS77ror8+bNy1lnnZUkufvuu3PMMcdk6dKlOfXUU/PII4/kmWeeyaOPPpqGhoaccMIJ+fznP59Pf/rTuemmm1JTU1OOSwMAAAAAoA/oVXuib9q0KUkydOjQJElzc3O2b9+eCRMmFOeMGTMmI0eOzJIlS5IkS5YsybHHHpuGhobinIkTJ6a1tTWrV6/u8nXa2trS2tra6QAAAAAAgN/Wa0L0jo6OXHPNNfnABz6QcePGJUlaWlpSU1OTIUOGdJrb0NCQlpaW4pz/GaC/WX+z1pXZs2envr6+eIwYMaKbrwYAAAAAgL6g14To06dPz6pVqzJ//vx9/lqzZs3Kpk2biseLL764z18TAAAAAIDKU9Y90d80Y8aMPPDAA1m8eHEOOeSQ4nhjY2O2bduWjRs3dlqNvn79+jQ2NhbnPPXUU52eb/369cVaV2pra1NbW9vNVwEAAAAAQF9T1pXohUIhM2bMyP3335/HHnsshx12WKf6SSedlAEDBmThwoXFsTVr1mTdunVpampKkjQ1NWXlypXZsGFDcc6CBQtSV1eXsWPH9syFAAAAAADQJ5V1Jfr06dMzb968fPe7383gwYOLe5jX19dn4MCBqa+vz+WXX56ZM2dm6NChqaury9VXX52mpqaceuqpSZJzzz03Y8eOzSWXXJJbb701LS0tuf766zN9+nSrzQEAAAAA2CtlDdHnzp2bJDnzzDM7jd999935+Mc/niT5yle+kurq6kyePDltbW2ZOHFi7rjjjuLcfv365YEHHshVV12VpqamDBo0KNOmTcvNN9/cU5cBAAAAAEAfVdYQvVAovO2c/fbbL3PmzMmcOXNKzhk1alQefPDB7mwNAAAAAADKuyc6AAAAAAD0ZkJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwDAO9zcuXNz3HHHpa6uLnV1dWlqasoPf/jDYn3r1q2ZPn16DjzwwBxwwAGZPHly1q9f3+k51q1bl0mTJmX//ffPsGHDct1112XHjh09fSkAANDthOgAAPAOd8ghh+SWW25Jc3Nzli1blrPOOisf+chHsnr16iTJtddem+9///u57777smjRorz00ku56KKLio9vb2/PpEmTsm3btjzxxBP5xje+kXvuuSc33HBDuS4JAAC6Tf9yNwAAAJTXBRdc0On8i1/8YubOnZulS5fmkEMOyV133ZV58+blrLPOSpLcfffdOeaYY7J06dKceuqpeeSRR/LMM8/k0UcfTUNDQ0444YR8/vOfz6c//encdNNNqampKcdlAQBAt7ASHQAAKGpvb8/8+fOzZcuWNDU1pbm5Odu3b8+ECROKc8aMGZORI0dmyZIlSZIlS5bk2GOPTUNDQ3HOxIkT09raWlzNDgAAlcpKdAAAICtXrkxTU1O2bt2aAw44IPfff3/Gjh2bFStWpKamJkOGDOk0v6GhIS0tLUmSlpaWTgH6m/U3a6W0tbWlra2teN7a2tpNVwMAAN3HSnQAACBHH310VqxYkSeffDJXXXVVpk2blmeeeWafvubs2bNTX19fPEaMGLFPXw8AAPaEEB0AAEhNTU2OPPLInHTSSZk9e3aOP/74/PVf/3UaGxuzbdu2bNy4sdP89evXp7GxMUnS2NiY9evX71R/s1bKrFmzsmnTpuLx4osvdu9FAQBANxCiAwAAO+no6EhbW1tOOumkDBgwIAsXLizW1qxZk3Xr1qWpqSlJ0tTUlJUrV2bDhg3FOQsWLEhdXV3Gjh1b8jVqa2tTV1fX6QAAgN7GnugAAPAON2vWrJx//vkZOXJkXn/99cybNy+PP/54Hn744dTX1+fyyy/PzJkzM3To0NTV1eXqq69OU1NTTj311CTJueeem7Fjx+aSSy7JrbfempaWllx//fWZPn16amtry3x1AACwd4ToAADwDrdhw4Zceumlefnll1NfX5/jjjsuDz/8cM4555wkyVe+8pVUV1dn8uTJaWtry8SJE3PHHXcUH9+vX7888MADueqqq9LU1JRBgwZl2rRpufnmm8t1SQAA0G2E6AAA8A531113vWV9v/32y5w5czJnzpySc0aNGpUHH3ywu1sDAICysyc6AAAAAACUIEQHAAAAAIAShOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACgBCE6AAAAAACUIEQHAAAAAIAShOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACgBCE6AAAAAACUIEQHAAAAAIAShOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACghD0K0Q8//PC8+uqrO41v3Lgxhx9++F43BQAAAAAAvcEehei/+MUv0t7evtN4W1tb/vM//3OvmwIAAAAAgN6g/+5M/t73vlf8+eGHH059fX3xvL29PQsXLsyhhx7abc0BAAAAAEA57VaIfuGFFyZJqqqqMm3atE61AQMG5NBDD81f/dVfdVtzAAAAAABQTrsVond0dCRJDjvssDz99NN597vfvU+aAgAAAACA3mC3QvQ3Pf/8893dBwAAAAAA9Dp7FKInycKFC7Nw4cJs2LChuEL9TX//93+/140BAAAA8PZuueWWvP766xk8eHA+85nPlLsdgD6nek8e9LnPfS7nnntuFi5cmF/96lf5r//6r04HAADQc37+85/n+uuvz8UXX5wNGzYkSX74wx9m9erVZe4MgH3thRdeyOuvv54kef311/PCCy+UuSOAvmePVqLfeeedueeee3LJJZd0dz8AAMBuWLRoUc4///x84AMfyOLFi/PFL34xw4YNy7//+7/nrrvuyr/8y7+Uu0UA9qG//du/3en8C1/4Qpm6Aeib9mgl+rZt2/I7v/M73d0LAACwmz7zmc/kC1/4QhYsWJCampri+FlnnZWlS5eWsTMA9rVvf/vbKRQKncYKhUK+/e1vl6kjgL5pj0L0//2//3fmzZvX3b0AAAC7aeXKlfn93//9ncaHDRuWX/3qV2XoCICesG3btjQ3N3dZa25uzrZt23q4I4C+a4+2c9m6dWu+/vWv59FHH81xxx2XAQMGdKp/+ctf7pbmAACAtzZkyJC8/PLLOeywwzqN/7//9//ynve8p0xdAbCvvd1q829/+9uZMmVKD3UD0LftUYj+k5/8JCeccEKSZNWqVZ1qVVVVe90UAACwa6ZMmZJPf/rTue+++1JVVZWOjo78+Mc/zqc+9alceuml5W4PgH3koosuysqVK9+yDkD32KMQ/Uc/+lF39wEAAOyBL33pS5k+fXpGjBiR9vb2jB07Nu3t7fmDP/iDXH/99eVuD4B9pKamJieddFKXW7qccsopnb4nA4C9s0chOgAAUH6FQiEtLS25/fbbc8MNN2TlypXZvHlz3ve+9+Woo44qd3sA7GMXXXRRli9f3unLRauqqnLhhReWrymAPmiPQvQPfehDb7lty2OPPbbHDQEAALumUCjkyCOPzOrVq3PUUUdlxIgR5W4JgB52xRVX5Otf/3qncwC61x6F6G/uh/6m7du3Z8WKFVm1alWmTZvWHX0BAABvo7q6OkcddVReffVVK88B3qFGjRqVwYMH5/XXX8/gwYMzatSocrcE0OfsUYj+la98pcvxm266KZs3b96rhgAAgF13yy235LrrrsvcuXMzbty4crcDQBl85jOfKXcLAH1at+6J/rGPfSzvf//785d/+Zfd+bQAAEAJl156aX7961/n+OOPT01NTQYOHNip/tprr5WpMwAA6Bu6NURfsmRJ9ttvv+58SgAA4C3cdttt5W4BAAD6tD0K0S+66KJO54VCIS+//HKWLVuWz372s93SGAAA8PZ8JxEAAOxbexSi19fXdzqvrq7O0UcfnZtvvjnnnntutzQGAADsnq1bt2bbtm2dxurq6srUDQAA9A17FKLffffd3d0HAACwB7Zs2ZJPf/rT+da3vpVXX311p3p7e3sZugIAgL5jr/ZEb25uzk9/+tMkyXvf+968733v65amAACAXfOnf/qn+dGPfpS5c+fmkksuyZw5c/Kf//mf+drXvpZbbrml3O0B0AMWLFiQRYsW5Ywzzsg555xT7nYA+pw9CtE3bNiQKVOm5PHHH8+QIUOSJBs3bsyHPvShzJ8/PwcddFB39ggAAJTw/e9/P//wD/+QM888M5dddllOO+20HHnkkRk1alTuvffeTJ06tdwtArAPbdmyJYsWLUqhUMiiRYvyO7/zOxk0aFC52wLoU6r35EFXX311Xn/99axevTqvvfZaXnvttaxatSqtra35P//n/3R3jwAAQAmvvfZaDj/88CS/2f/8tddeS5J88IMfzOLFi8vZGgA94N57702hUEiSFAqF3HvvvWXuCKDv2aMQ/aGHHsodd9yRY445pjg2duzYzJkzJz/84Q+7rTkAAOCtHX744Xn++eeTJGPGjMm3vvWtJL9Zof7mp0YB6JvWrl2bF154odPYCy+8kLVr15apI4C+aY9C9I6OjgwYMGCn8QEDBqSjo2OvmwIAAN7af/zHf6SjoyOXXXZZ/v3f/z1J8pnPfCZz5szJfvvtl2uvvTbXXXddmbsEYF/p6OjI/Pnzu6zNnz9fPgPQjfZoT/Szzjorn/zkJ/PNb34zw4cPT5L853/+Z6699tqcffbZ3dogAACws6OOOiovv/xyrr322iTJRz/60dx+++352c9+lubm5hx55JE57rjjytwlAPvKs88+mzfeeKPL2htvvJFnn302Y8aM6eGuAPqmPVqJ/jd/8zdpbW3NoYcemiOOOCJHHHFEDjvssLS2tuarX/1qd/cIAAD8ljf3v33Tgw8+mC1btmTUqFG56KKLBOgAfdzo0aMzcODALmv7779/Ro8e3cMdAfRde7QSfcSIEVm+fHkeffTR/OxnP0uSHHPMMZkwYUK3NgcAAADAzqqrqzNlypTcfffdO9WmTJmS6uo9WjcJQBd260/Uxx57LGPHjk1ra2uqqqpyzjnn5Oqrr87VV1+dU045Je9973vzr//6r/uqVwAA4P+vqqoqVVVVO40B8M5x5JFHZtSoUZ3GRo0alSOOOKJMHQH0Tbu1Ev22227LFVdckbq6up1q9fX1+cQnPpEvf/nLOe2007qtQQAAYGeFQiEf//jHU1tbmyTZunVr/uiP/iiDBg3qNO/b3/52OdoDoIdMnTo1s2fPTqFQSFVVVaZOnVrulgD6nN1aif7v//7vOe+880rWzz333DQ3N+91UwAAwFubNm1ahg0blvr6+tTX1+djH/tYhg8fXjx/8wCgbxs0aFDOOOOMVFVV5YwzztjpH1MB2Hu7tRJ9/fr1GTBgQOkn698/r7zyyl43BQAAvLWu9sAF4J3pnHPOyTnnnFPuNgD6rN1aif6e97wnq1atKln/yU9+koMPPnivmwIAAAAAgN5gt0L0D3/4w/nsZz+brVu37lR74403cuONN+Z3f/d3u605AAAAAAAop93azuX666/Pt7/97YwePTozZszI0UcfnST52c9+ljlz5qS9vT3/3//3/+2TRgEAAAAAoKftVoje0NCQJ554IldddVVmzZqVQqGQJKmqqsrEiRMzZ86cNDQ07JNGAQAAAACgp+1WiJ4ko0aNyoMPPpj/+q//ytq1a1MoFHLUUUflXe96177oDwAAAAAAyma3Q/Q3vetd78opp5zSnb0AAAAAAECvsltfLNrdFi9enAsuuCDDhw9PVVVVvvOd73Sqf/zjH09VVVWn47zzzus057XXXsvUqVNTV1eXIUOG5PLLL8/mzZt78CoAAAAAAOiryhqib9myJccff3zmzJlTcs55552Xl19+uXh885vf7FSfOnVqVq9enQULFuSBBx7I4sWLc+WVV+7r1gEAAAAAeAfY4+1cusP555+f888//y3n1NbWprGxscvaT3/60zz00EN5+umnc/LJJydJvvrVr+bDH/5w/vIv/zLDhw/v9p4BAAAAAHjnKOtK9F3x+OOPZ9iwYTn66KNz1VVX5dVXXy3WlixZkiFDhhQD9CSZMGFCqqur8+STT5ajXQAAAAAA+pCyrkR/O+edd14uuuiiHHbYYfn5z3+eP/uzP8v555+fJUuWpF+/fmlpacmwYcM6PaZ///4ZOnRoWlpaSj5vW1tb2traiuetra377BoAAAAA9qWvfe1rWbduXUaOHJlPfOIT5W4HoM/p1SH6lClTij8fe+yxOe6443LEEUfk8ccfz9lnn73Hzzt79ux87nOf644WAQAAAMrmlVdeybp165Ik69atyyuvvJKDDjqozF0B9C29fjuX/+nwww/Pu9/97qxduzZJ0tjYmA0bNnSas2PHjrz22msl91FPklmzZmXTpk3F48UXX9ynfQMAAADsC3Pnzn3LcwD2XkWF6L/85S/z6quv5uCDD06SNDU1ZePGjWlubi7Oeeyxx9LR0ZHx48eXfJ7a2trU1dV1OgAAAAAqyeLFizttV5v8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XzYKAAAAAAC7o0+E6EkyY8aMktu39Fa1tbW58cYbd9pahsrn3vZt7m/f5d72Xe5t3+XeAoC/DwH2tapCoVAodxMAAAAAANAbVZe7AQAAAAAA6K2E6AAAAAAAUIIQHQAAAAAAShCil9GcOXNy6KGHZr/99sv48ePz1FNPlbsl3sbixYtzwQUXZPjw4amqqsp3vvOdTvVCoZAbbrghBx98cAYOHJgJEybkueee6zTntddey9SpU1NXV5chQ4bk8ssvz+bNm3vwKvhts2fPzimnnJLBgwdn2LBhufDCC7NmzZpOc7Zu3Zrp06fnwAMPzAEHHJDJkydn/fr1neasW7cukyZNyv77759hw4bluuuuy44dO3ryUujC3Llzc9xxx6Wuri51dXVpamrKD3/4w2Ldve07brnlllRVVeWaa64pjrm/lemmm25KVVVVp2PMmDHFuvsKAAD0JCF6mfzzP/9zZs6cmRtvvDHLly/P8ccfn4kTJ2bDhg3lbo23sGXLlhx//PGZM2dOl/Vbb701t99+e+688848+eSTGTRoUCZOnJitW7cW50ydOjWrV6/OggUL8sADD2Tx4sW58sore+oS6MKiRYsyffr0LF26NAsWLMj27dtz7rnnZsuWLcU51157bb7//e/nvvvuy6JFi/LSSy/loosuKtbb29szadKkbNu2LU888US+8Y1v5J577skNN9xQjkvifzjkkENyyy23pLm5OcuWLctZZ52Vj3zkI1m9enUS97avePrpp/O1r30txx13XKdx97dyvfe9783LL79cPP7t3/6tWHNfAQCAHlWgLN7//vcXpk+fXjxvb28vDB8+vDB79uwydsXuSFK4//77i+cdHR2FxsbGwl/8xV8UxzZu3Fiora0tfPOb3ywUCoXCM888U0hSePrpp4tzfvjDHxaqqqoK//mf/9ljvfPWNmzYUEhSWLRoUaFQ+M19HDBgQOG+++4rzvnpT39aSFJYsmRJoVAoFB588MFCdXV1oaWlpThn7ty5hbq6ukJbW1vPXgBv613velfh7/7u79zbPuL1118vHHXUUYUFCxYUzjjjjMInP/nJQqHg924lu/HGGwvHH398lzX3FQAA6GlWopfBtm3b0tzcnAkTJhTHqqurM2HChCxZsqSMnbE3nn/++bS0tHS6r/X19Rk/fnzxvi5ZsiRDhgzJySefXJwzYcKEVFdX58knn+zxnunapk2bkiRDhw5NkjQ3N2f79u2d7u2YMWMycuTITvf22GOPTUNDQ3HOxIkT09raWlzxTPm1t7dn/vz52bJlS5qamtzbPmL69OmZNGlSp/uY+L1b6Z577rkMHz48hx9+eKZOnZp169YlcV8BAICe17/cDbwT/epXv0p7e3un/7FLkoaGhvzsZz8rU1fsrZaWliTp8r6+WWtpacmwYcM61fv375+hQ4cW51BeHR0dueaaa/KBD3wg48aNS/Kb+1ZTU5MhQ4Z0mvvb97are/9mjfJauXJlmpqasnXr1hxwwAG5//77M3bs2KxYscK9rXDz58/P8uXL8/TTT+9U83u3co0fPz733HNPjj766Lz88sv53Oc+l9NOOy2rVq1yXwEAgB4nRAf4H6ZPn55Vq1Z12nuXynf00UdnxYoV2bRpU/7lX/4l06ZNy6JFi8rdFnvpxRdfzCc/+cksWLAg++23X7nboRudf/75xZ+PO+64jB8/PqNGjcq3vvWtDBw4sIydAQAA70S2cymDd7/73enXr1/Wr1/faXz9+vVpbGwsU1fsrTfv3Vvd18bGxp2+PHbHjh157bXX3PteYMaMGXnggQfyox/9KIccckhxvLGxMdu2bcvGjRs7zf/te9vVvX+zRnnV1NTkyCOPzEknnZTZs2fn+OOPz1//9V+7txWuubk5GzZsyIknnpj+/funf//+WbRoUW6//fb0798/DQ0N7m8fMWTIkIwePTpr1671+xYAAOhxQvQyqKmpyUknnZSFCxcWxzo6OrJw4cI0NTWVsTP2xmGHHZbGxsZO97W1tTVPPvlk8b42NTVl48aNaW5uLs557LHH0tHRkfHjx/d4z/xGoVDIjBkzcv/99+exxx7LYYcd1ql+0kknZcCAAZ3u7Zo1a7Ju3bpO93blypWd/pFkwYIFqaury9ixY3vmQthlHR0daWtrc28r3Nlnn52VK1dmxYoVxePkk0/O1KlTiz+7v33D5s2b8/Of/zwHH3yw37cAAECPs51LmcycOTPTpk3LySefnPe///257bbbsmXLllx22WXlbo23sHnz5qxdu7Z4/vzzz2fFihUZOnRoRo4cmWuuuSZf+MIXctRRR+Wwww7LZz/72QwfPjwXXnhhkuSYY47JeeedlyuuuCJ33nlntm/fnhkzZmTKlCkZPnx4ma6K6dOnZ968efnud7+bwYMHF/fLra+vz8CBA1NfX5/LL788M2fOzNChQ1NXV5err746TU1NOfXUU5Mk5557bsaOHZtLLrkkt956a1paWnL99ddn+vTpqa2tLeflvePNmjUr559/fkaOHJnXX3898+bNy+OPP56HH37Yva1wgwcPLn53wZsGDRqUAw88sDju/lamT33qU7ngggsyatSovPTSS7nxxhvTr1+/XHzxxX7fAgAAPa9A2Xz1q18tjBw5slBTU1N4//vfX1i6dGm5W+Jt/OhHPyok2emYNm1aoVAoFDo6Ogqf/exnCw0NDYXa2trC2WefXVizZk2n53j11VcLF198ceGAAw4o1NXVFS677LLC66+/Xoar4U1d3dMkhbvvvrs454033ij88R//ceFd73pXYf/99y/8/u//fuHll1/u9Dy/+MUvCueff35h4MCBhXe/+92FP/mTPyls3769h6+G3/aHf/iHhVGjRhVqamoKBx10UOHss88uPPLII8W6e9u3nHHGGYVPfvKTxXP3tzJ99KMfLRx88MGFmpqawnve857CRz/60cLatWuLdfcVAADoSVWFQqFQpvweAAAAAAB6NXuiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AJIkH//4x1NVVbXTsXbt2nK3BgAAAFA2/cvdAAC9x3nnnZe7776709hBBx20W8/R3t6eqqqqVFf7d1oAAACg8kk4ACiqra1NY2Njp+Ov//qvc+yxx2bQoEEZMWJE/viP/zibN28uPuaee+7JkCFD8r3vfS9jx45NbW1t1q1bl7a2tnzqU5/Ke97zngwaNCjjx4/P448/Xr6LAwAAANgDQnQA3lJ1dXVuv/32rF69Ot/4xjfy2GOP5U//9E87zfn1r3+dP//zP8/f/d3fZfXq1Rk2bFhmzJiRJUuWZP78+fnJT36S//W//lfOO++8PPfcc2W6EgAAAIDdV1UoFArlbgKA8vv4xz+ef/qnf8p+++1XHDv//PNz3333dZr3L//yL/mjP/qj/OpXv0rym5Xol112WVasWJHjjz8+SbJu3bocfvjhWbduXYYPH1587IQJE/L+978/X/rSl3rgigAAAAD2nj3RASj60Ic+lLlz5xbPBw0alEcffTSzZ8/Oz372s7S2tmbHjh3ZunVrfv3rX2f//fdPktTU1OS4444rPm7lypVpb2/P6NGjOz1/W1tbDjzwwJ65GAAAAIBuIEQHoGjQoEE58sgji+e/+MUv8ru/+7u56qqr8sUvfjFDhw7Nv/3bv+Xyyy/Ptm3biiH6wIEDU1VVVXzc5s2b069fvzQ3N6dfv36dXuOAAw7omYsBAAAA6AZCdABKam5uTkdHR/7qr/4q1dW/+RqNb33rW2/7uPe9731pb2/Phg0bctppp+3rNgEAAAD2GV8sCkBJRx55ZLZv356vfvWr+Y//+I/84z/+Y+688863fdzo0aMzderUXHrppfn2t7+d559/Pk899VRmz56dH/zgBz3QOQAAAED3EKIDUNLxxx+fL3/5y/nzP//zjBs3Lvfee29mz569S4+9++67c+mll+ZP/uRPcvTRR+fCCy/M008/nZEjR+7jrgEAAAC6T1WhUCiUuwkAAAAAAOiNrEQHAAAAAIAShOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACgBCE6AAAAAACUIEQHAAAAAIAShOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAn/PzqXRbK/3hquAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1500x700 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2, figsize=[15, 7])\n",
    "sns.histplot(cleaned_titanic_train, x='Fare', ax=axes[0])\n",
    "sns.boxplot(cleaned_titanic_train, y='Fare', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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9//+38jLy4uhQ4dGRMTvfve7WLlyZXTu3Dlzh1eXLl1i586d8f7778eWLVti3bp1MWTIkMwx27Ztu1dfjaFJJzrfY+LEifHss8/GwoUL4+ijj95v7Z4vaeXKlXH88cdHcXFxvPHGG7Vq1q9fHxHxqRN/TZ48OSZNmpT5XFFR0eqCqWHDR0R5HZOvFXbtGi++MDuljgAAAODw0qFDh7jooovioosuittuuy3+4R/+Ie6444545ZVXIiJqzctUVVW1z2P89YveIv6cZVxwwQUxY8aMOOuss2LGjBkxfvz4T+2hffv28aUvfSlmzJgRY8aMiRkzZsQVV1yRmTB927ZtMWDAgL0eCYyIOOqoow74mhtSk4ZSSZLEDTfcELNmzYr58+dH796969xnzyRh3bt3j4iIkpKS+N73vhcbNmyIoqKiiIiYM2dO5OXlRd++ffd5jJycnMjJyWmYizhMlW/cGDOfe22/NWMuPjulbgAAAODw17dv33j66aczYc+6devijDPOiIioNel5XcaOHRs333xzXHnllfGHP/whxowZU2f9RRddFEuXLo158+bFd7/73cy2M888M5588skoKiqq9eK4v9a9e/dYvHhxnHvuuRERsXv37igtLY0zzzyz3j0fjCZ9fG/ChAnx+OOPx4wZM6Jz585RVlYWZWVl8fHHH0dExPvvvx/f+c53orS0ND744IN45pln4uqrr45zzz03+vXrFxERw4YNi759+8ZVV10Vv/vd7+KFF16IW2+9NSZMmNDqgycAAACg4W3cuDEuuOCCePzxx+Ptt9+OVatWxVNPPRU/+MEP4rLLLouOHTvGWWedlZnAfMGCBXHrrbfW+/iXX355bN26NcaPHx/nn39+9OjRY7/15557bhQXF8fYsWOjd+/etR7FGzt2bBQWFsZll10Wr7zySqxatSrmz58f//iP/xh//OMfIyLi61//etx9993x9NNPx/Lly+NrX/tabN68+aC+mwPRpKHUQw89FFu2bInzzjsvunfvnlmefPLJiPjzLWgvvfRSDBs2LE4++eS46aabYvTo0fHLX/4yc4w2bdrEs88+G23atImSkpL48pe/HFdffXXcddddTXVZAAAAQAvWqVOnGDJkSNx3331x7rnnxqmnnhq33XZbXHfddfGjH/0oIiIeeeSR2L17dwwYMCBuvPHGWncv1aVz585x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AAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6po0lFq4cGFceuml0aNHj8jKyoqnn3661vZrrrkmsrKyai0jRoyoVbNp06YYO3Zs5OXlRUFBQVx77bWxbdu2FK8CAAAAgAPVpKHU9u3bo3///jF16tRPrRkxYkSsW7cus/zsZz+rtX3s2LGxdOnSmDNnTjz77LOxcOHCuP766xu7dQAAAAAOQdumPPnIkSNj5MiR+63JycmJ4uLifW5btmxZzJ49O958880YOHBgREQ8+OCDcfHFF8e//Mu/RI8ePRq8ZwAAAAAOXbOfU2r+/PlRVFQUJ510UowfPz42btyY2bZo0aIoKCjIBFIREUOHDo3s7OxYvHhxU7QLAAAAQD006Z1SdRkxYkRcfvnl0bt373j//ffjW9/6VowcOTIWLVoUbdq0ibKysigqKqq1T9u2baNLly5RVlb2qcetrKyMysrKzOeKiopGuwYAAAAA9tasQ6kxY8Zk/nzaaadFv3794vjjj4/58+fHhRdeeNDHnTJlStx5550N0SIAAAAAB6HZP77314477rgoLCyMlStXRkREcXFxbNiwoVbN7t27Y9OmTZ86D1VExOTJk2PLli2Z5cMPP2zUvgEAAACo7bAKpf74xz/Gxo0bo3v37hERUVJSEps3b47S0tJMzbx586KmpiaGDBnyqcfJycmJvLy8WgsAAAAA6WnSx/e2bduWuespImLVqlWxZMmS6NKlS3Tp0iXuvPPOGD16dBQXF8f7778fN998c5xwwgkxfPjwiIjo06dPjBgxIq677rqYNm1aVFVVxcSJE2PMmDHevAcAAADQjDXpnVJvvfVWnHHGGXHGGWdERMSkSZPijDPOiNtvvz3atGkTb7/9dvzt3/5tnHjiiXHttdfGgAED4pVXXomcnJzMMZ544ok4+eST48ILL4yL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",
      "text/plain": [
       "<Figure size 1200x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(1, 1, figsize=[12, 5])\n",
    "sns.histplot(cleaned_titanic_train, x='Fare', hue='Survived', alpha=0.4)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 船舱等级与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'int' object has no attribute 'startswith'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[27], line 5\u001b[0m\n\u001b[0;32m      3\u001b[0m pclass_label \u001b[38;5;241m=\u001b[39m pclass_count\u001b[38;5;241m.\u001b[39mindex\n\u001b[0;32m      4\u001b[0m axes[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mpie(pclass_count, labels\u001b[38;5;241m=\u001b[39mpclass_label)\n\u001b[1;32m----> 5\u001b[0m \u001b[43msns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcountplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcleaned_titanic_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mPclass\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhue\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mSurvived\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43max\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxes\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m      6\u001b[0m plt\u001b[38;5;241m.\u001b[39mshow()\n",
      "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\seaborn\\categorical.py:2955\u001b[0m, in \u001b[0;36mcountplot\u001b[1;34m(data, x, y, hue, order, hue_order, orient, color, palette, saturation, width, dodge, ax, **kwargs)\u001b[0m\n\u001b[0;32m   2952\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ax \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m   2953\u001b[0m     ax \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39mgca()\n\u001b[1;32m-> 2955\u001b[0m \u001b[43mplotter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43max\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   2956\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ax\n",
      "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\seaborn\\categorical.py:1587\u001b[0m, in \u001b[0;36m_BarPlotter.plot\u001b[1;34m(self, ax, bar_kws)\u001b[0m\n\u001b[0;32m   1585\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Make the plot.\"\"\"\u001b[39;00m\n\u001b[0;32m   1586\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdraw_bars(ax, bar_kws)\n\u001b[1;32m-> 1587\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mannotate_axes\u001b[49m\u001b[43m(\u001b[49m\u001b[43max\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   1588\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39morient \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mh\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m   1589\u001b[0m     ax\u001b[38;5;241m.\u001b[39minvert_yaxis()\n",
      "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\seaborn\\categorical.py:767\u001b[0m, in \u001b[0;36m_CategoricalPlotter.annotate_axes\u001b[1;34m(self, ax)\u001b[0m\n\u001b[0;32m    764\u001b[0m     ax\u001b[38;5;241m.\u001b[39mset_ylim(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m.5\u001b[39m, \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mplot_data) \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m.5\u001b[39m, auto\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m    766\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhue_names \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 767\u001b[0m     \u001b[43max\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlegend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mloc\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mbest\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtitle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhue_title\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\matplotlib\\axes\\_axes.py:322\u001b[0m, in \u001b[0;36mAxes.legend\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m    204\u001b[0m \u001b[38;5;129m@_docstring\u001b[39m\u001b[38;5;241m.\u001b[39mdedent_interpd\n\u001b[0;32m    205\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mlegend\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m    206\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m    207\u001b[0m \u001b[38;5;124;03m    Place a legend on the Axes.\u001b[39;00m\n\u001b[0;32m    208\u001b[0m \n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    320\u001b[0m \u001b[38;5;124;03m    .. plot:: gallery/text_labels_and_annotations/legend.py\u001b[39;00m\n\u001b[0;32m    321\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[1;32m--> 322\u001b[0m     handles, labels, kwargs \u001b[38;5;241m=\u001b[39m \u001b[43mmlegend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_parse_legend_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    323\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlegend_ \u001b[38;5;241m=\u001b[39m mlegend\u001b[38;5;241m.\u001b[39mLegend(\u001b[38;5;28mself\u001b[39m, handles, labels, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m    324\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlegend_\u001b[38;5;241m.\u001b[39m_remove_method \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_remove_legend\n",
      "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\matplotlib\\legend.py:1361\u001b[0m, in \u001b[0;36m_parse_legend_args\u001b[1;34m(axs, handles, labels, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1357\u001b[0m     handles \u001b[38;5;241m=\u001b[39m [handle \u001b[38;5;28;01mfor\u001b[39;00m handle, label\n\u001b[0;32m   1358\u001b[0m                \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(_get_legend_handles(axs, handlers), labels)]\n\u001b[0;32m   1360\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:  \u001b[38;5;66;03m# 0 args: automatically detect labels and handles.\u001b[39;00m\n\u001b[1;32m-> 1361\u001b[0m     handles, labels \u001b[38;5;241m=\u001b[39m \u001b[43m_get_legend_handles_labels\u001b[49m\u001b[43m(\u001b[49m\u001b[43maxs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhandlers\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   1362\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m handles:\n\u001b[0;32m   1363\u001b[0m         log\u001b[38;5;241m.\u001b[39mwarning(\n\u001b[0;32m   1364\u001b[0m             \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo artists with labels found to put in legend.  Note that \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   1365\u001b[0m             \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124martists whose label start with an underscore are ignored \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   1366\u001b[0m             \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwhen legend() is called with no argument.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\matplotlib\\legend.py:1291\u001b[0m, in \u001b[0;36m_get_legend_handles_labels\u001b[1;34m(axs, legend_handler_map)\u001b[0m\n\u001b[0;32m   1289\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handle \u001b[38;5;129;01min\u001b[39;00m _get_legend_handles(axs, legend_handler_map):\n\u001b[0;32m   1290\u001b[0m     label \u001b[38;5;241m=\u001b[39m handle\u001b[38;5;241m.\u001b[39mget_label()\n\u001b[1;32m-> 1291\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m label \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[43mlabel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstartswith\u001b[49m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m   1292\u001b[0m         handles\u001b[38;5;241m.\u001b[39mappend(handle)\n\u001b[0;32m   1293\u001b[0m         labels\u001b[38;5;241m.\u001b[39mappend(label)\n",
      "\u001b[1;31mAttributeError\u001b[0m: 'int' object has no attribute 'startswith'"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "pclass_count = cleaned_titanic_train['Pclass'].value_counts()\n",
    "pclass_label = pclass_count.index\n",
    "axes[0].pie(pclass_count, labels=pclass_label)\n",
    "sns.countplot(cleaned_titanic_train, x='Pclass', hue='Survived', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 性别与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ExERaWihnRwksCyW/4TR8PmxevTRR0lOTiYnJ4fvvvuOhIQEevbsyf3333/Gz2m1WlmwYAF33nknnTt3pn379syYMYP+/fuf8DEZGRmsWrWKKVOmMHjwYFwuFy1btmTo0KF1zuIXERExI4vP5/Od+jARETGb0tJS4uPjKSkpwek8/ZUp3lq3vxGqMq+BhxYYXUJAJQydaMjr6ucqtJ3pz1V9/16pKUVERERETEHBVERERERMQcFURERERExBwVRERERETEHBVERERERMQcFURERERExBwVRERERETEHBVERERERMQcFURERERExBwVRERERETEHBVERERERMQcFURERERExBwVRERERETEHBVERERERMQcFURERERExBwVRERERETEHBVERERERMQcFURERERExBwVRERERETEHBVERERERMQcFURMRAM2fOpFWrVkRFRdGnTx/WrVtndEkiIoZRMBURMcibb77J5MmTeeihh/jiiy/o1q0bQ4YMoaioyOjSREQMoWAqImKQv/zlL9x+++3ceuutdOrUiVmzZhETE8OcOXOMLk1ExBAKpiIiBnC73WzYsIGBAwf6t1mtVgYOHMiaNWsMrExExDgRRhcgIhKODhw4gMfjITU1tdb21NRUtm3bVudjXC4XLpfLf7+kpASA0tLSM6qhouzIGT0uWJWWHzW6hICynuHPxdnSz1VoO9Ofq2N/p3w+30mPUzAVEQkSOTk5/PnPfz5ue2ZmpgHViPlNMboACUln93N15MgR4uPjT7hfwVRExADNmjXDZrNRWFhYa3thYSFpaWl1Pmbq1KlMnjzZf9/r9XLo0CGSkpKwWCyNWm+wKy0tJTMzkz179uB0Oo0uR0KEfq7qz+fzceTIETIyMk56nIKpiIgB7HY7vXr1YunSpQwfPhyoCZpLly5lwoQJdT7G4XDgcDhqbUtISGjkSkOL0+lUgJAGp5+r+jlZS+kxCqYiIgaZPHkyo0ePpnfv3lxwwQVMnz6d8vJybr31VqNLExExhIKpiIhBbrzxRvbv38+0adMoKCige/fuLFmy5LgJUSIi4ULBVETEQBMmTDhh1700HIfDwUMPPXTcUAiRs6Gfq4Zn8Z1q3r6IiIiISABogX0RERERMQUFUxERERExBQVTERERETEFBVMREQlpM2fOpFWrVkRFRdGnTx/WrVtndEkS5D79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",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "sex_count = cleaned_titanic_train['Sex'].value_counts()\n",
    "sex_label = sex_count.index\n",
    "axes[0].pie(sex_count, labels=sex_label)\n",
    "sns.countplot(cleaned_titanic_train, x='Survived', hue='Sex', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 登船港口与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "embarked_count = cleaned_titanic_train['Embarked'].value_counts()\n",
    "embarked_label = embarked_count.index\n",
    "axes[0].pie(embarked_count, labels=embarked_label)\n",
    "sns.countplot(cleaned_titanic_train, x='Embarked', hue='Survived', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 家庭成员数量与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "familyNum_count = cleaned_titanic_train['FamilyNum'].value_counts()\n",
    "familyNum_label = familyNum_count.index\n",
    "axes[0].pie(familyNum_count, labels=familyNum_label)\n",
    "sns.countplot(cleaned_titanic_train, x='FamilyNum', hue='Survived', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在分析步骤中，我们将利用以上清理后到的数据，进行逻辑回归分析，目标是得到一个可以根据泰坦尼克号乘客各个属性，对沉船事件后幸存情况进行预测的数学模型。\n",
    "\n",
    "我们先引入做逻辑回归所需的模块。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import statsmodels.api as sm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然后可以创建一个新的DataFrame`lr_titanic_train`，让它作为我们进逻辑性回归分析所用的数据。\n",
    "\n",
    "和`cleaned_titanic_train`区分开的原因是，我们在进行回归分析前，还可能需要对数据进行一些准备，比如引入虚拟变量，这些都可以在`lr_titanic_train`上执行。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_titanic_train = cleaned_titanic_train.copy()\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "移除大概率不会影响乘客幸存概率的变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_titanic_train = lr_titanic_train.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'Embarked'], axis=1)\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据里还存在分类变量，无法直接建立逻辑回归模型。我们需要引入虚拟变量，也就是用0和1分别表示是否属于该类别。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_titanic_train = pd.get_dummies(lr_titanic_train, drop_first=True, columns=['Pclass', 'Sex'], dtype=int)\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，我们要把因变量和自变量划分出来。\n",
    "\n",
    "因变量是Survived变量，因为我们进行逻辑回归的目的，是根据其它可能对乘客生还概率有影响的变量，来预测幸存情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = lr_titanic_train['Survived']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以把除`Survived`之外的先纳入自变量，但需要查看它们之间的相关性。如果其中有些变量之间相关性很高，会导致共线性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = lr_titanic_train.drop(['Survived'], axis=1)\n",
    "X.corr()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一般我们认为，当相关系数的绝对值大于0.8的时候，可能导致严重共线性，所以我们检查的时候，找绝对值大于0.8的值即可。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X.corr().abs() > 0.8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从以上输出来看，`SibSp`和`FamilyNum`之间的相关系数绝对值大于0.8。这符合预期，因为`FamilyNum`是根据`SibSp`和`Parch`计算出来的。\n",
    "\n",
    "不同变量之间的如果相关性过高，会导致数值优化算法无法收敛，无法获得逻辑回归模型参数的计算结果，因此我们需要移除`FamilyNum`或`SibSp`。我们对同乘家庭成员是否会影响幸存概率感兴趣，所以保留`FamilyNum`。\n",
    "\n",
    "此外，如果仔细看相关系数数值，会发现`Parch`和`FamilyNum`之间也存在强相关，相关系数为0.78，接近0.8，因此我们也对`Parch`进行移除，避免算法无法收敛。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = X.drop(['Parch', 'SibSp'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = sm.add_constant(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = sm.Logit(y, X).fit()\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当我们把显著区间设定为0.05时，以上结果的P值可以看出，模型认为船票价格对乘客幸存概率没有显著性影响。因此可以把这个变量移除后，再次建立逻辑回归模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = X.drop(['Fare'], axis=1)\n",
    "model = sm.Logit(y, X).fit()\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " 逻辑回归模型预测以下因素的增加（或存在）会降低幸存概率：年龄、同乘家庭成员数、不在一等舱、性别为男性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Age\n",
    "np.exp(-0.0395)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，年龄每增加1岁，生还概率降低4%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# FamilyNum\n",
    "np.exp(-0.2186)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，每多一名同乘家庭成员，生还概率降低20%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Pclass_2\n",
    "np.exp(-1.1798)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，二等舱乘客的生还概率比一等舱乘客低71%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Pclass_3\n",
    "np.exp(-2.3458)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，三等舱乘客的生还概率比一等舱乘客低90%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Sex_male\n",
    "np.exp(-2.7854)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，男性乘客的生还概率比女性乘客低94%左右。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据模型参数值，我们总结：\n",
    "- 年龄小的乘客幸存概率更高；\n",
    "- 女性乘客的生还率比男性乘客的幸存概率更高；\n",
    "- 来自的船舱等级高的乘客幸存概率更高；\n",
    "- 同乘家庭成员少的乘客幸存概率更高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "前两条背后的原因可能与泰坦尼克号沉船后逃生时，“让孩子和女性先走”的原则。第三条说明可能当时舱位更尊贵的乘客拥有了优先逃生的机会。第四条可能是因为拥有较大数量家庭成员的乘客在灾难发生时会急于解救其他家庭成员而非选择逃生，最后也失去了自己逃生的机会。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "得到模型后，我们将用于预测`titianic_test.csv`里泰坦尼克号乘客的生还情况。\n",
    "\n",
    "首先读取`titianic_test.csv`的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "titanic_test = pd.read_csv(\"titanic_test.csv\")\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于逻辑回归模型不允许数据中有缺失值，因此我们需要检查`titanic_test`是否存在数据缺失。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "titanic_test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从以上输出可见，`Age`、`Fare`、`Cabin`存在缺失值。其中`Fare`和`Cabin`不属于回归模型的自变量，即使缺失也不会影响预测，因此可以忽略；`Age`需要我们进行和针对`cleaned_titanic_train`同样的操作，即用平均值填充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "titanic_test['Age'] = titanic_test['Age'].fillna(titanic_test['Age'].mean())\n",
    "titanic_test['Age'].isna().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下一步是给模型中的分类变量引入虚拟变量，但在引入前我们需要先把分类变量的类型转换为Category，并且通过`categories`参数，让程序知道所有可能的分类值。这样做的原因是，预测数据包含的分类可能不全。我们需要确保引入虚拟变量的时候，不会漏掉某个或某些分类。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "titanic_test['Pclass'] = pd.Categorical(titanic_test['Pclass'], categories=['1', '2', '3'])\n",
    "titanic_test['Sex'] = pd.Categorical(titanic_test['Sex'], categories=['female', 'male'])\n",
    "titanic_test['Embarked'] = pd.Categorical(titanic_test['Sex'], categories=['C', 'Q', 'S'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下一步，对分类变量引入虚拟变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "titanic_test = pd.get_dummies(titanic_test, drop_first=True, columns=['Pclass', 'Sex'], dtype=int)\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看一下模型需要的输入变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.params"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于我们在数据整理步骤建立了`FamilyNum`变量，此处也需要对预测数据加上此变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "titanic_test['FamilyNum'] = titanic_test['SibSp'] + titanic_test['Parch']\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来构建我们要输入给模型进行预测的变量，需要和模型训练时的输入一致。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = titanic_test[['Age', 'FamilyNum', 'Pclass_2', 'Pclass_3', 'Sex_male']]\n",
    "X_test = sm.add_constant(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在就可以调用逻辑回归模型的`predict`方法，获得预测的幸存概率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "predicted_value = model.predict(X_test)\n",
    "predicted_value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们获得了逻辑回归模型预测的`titanic_test.csv`里，泰坦尼克号乘客的幸存概率。我们可以把概率大于等于0.5的预测为幸存，小于0.5的预测为遇难，输出一下这个最终的预测结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "predicted_value > 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
